千锋教育-做有情怀、有良心、有品质的IT职业教育机构

400-811-9990
当前位置:首页  >  技术文章  >  正文

Java基本类型之间是如何进行转换的?

时间:2022-11-15 17:47     来源:千锋教育 作者:syq

  一. 类型转换

  在Java中,将一种类型的值赋给另一种类型是很常见的,在这个赋值过程中有可能会进行类型的转换,转换分为自动转换和强制转换。

  自动类型转换(隐式转换)无需进行任何操作,而强制类型转换则需要显式转换,即需要使用强制转换操作符(type)。

Java基本类型之间是如何进行转换的

  注意: boolean类型与其他所有的7种类型都不能进行类型转换,而其他7种基本类型彼此之间都可以进行转换,但是可能会出现精度损失或者其他的一些变化。

  二. 自动转换

  1. 自动转换时机

  那么什么时候会进行自动转换呢?一般当一个较"小"的数据与一个较"大"的数据一起运算时,系统会自动将"小"数据转换成"大"数据,再进行运算,这时候就发生了自动转换。

  首先我们将7种类型按下面从小到大的顺序排列一下: byte < (short=char) < int < long < float < double 这里我们所说的"大"与"小",并不是指占用的字节多少,而是指表示值的范围的大小。

  在上面的7种类型之间,如果数据类型是从小转换到大,可以自动转换,自动转换时会发生扩宽(widening conversion);而从大到小,必须进行强制转换;short和char两种类型之间也必须强制转换。这是因为较大的类型(如int) 要保存较小的类型(如byte),内存总是足够的,不需要强制转换。我们直接将整型字面值(常量)赋值到byte、short、char、long的时候,其实也是自动进行了类型转换。

  比如下面的源码:

  //“小”转“大”,自动转换 byte b = 100; int i; i = b; System.out.println("i=" + i);

  //“大”转“小”,强制转换 int i; float f = 20000f; i = (int) f; System.out.println("i=" + i);

  //short与char之间需要强制类型转换 short s = 100; char c = 90; s=(short)c; System.out.println("s="+s);

  2. 自动转换时的精度损失

  除了以下几种情况可能会导致精度损失以外,其他的转换都不会出现精度损失。int--> floatlong--> floatlong--> doublefloat -->double without strictfp 除了可能的精度损失外,自动转换时不会出现任何运行时异常。

  三. 强制转换

  1. 强制转换语法

  如果要把"大"的转成"小"的,或者在short与char之间进行转换,就必须进行强制转换,也被称作缩小转换(narrowing conversion),因为必须显式地使数值变得更小 以适应目标类型。

  严格地说,将byte转为char不属于缩小转换narrowing conversion,因为从byte到char的过程其实是byte-->int-->char,也就是既有扩宽操作widening,也有缩小操作narrowing。

  强制转换时需要采用转换操作符(目标基本类型),格式如下:

  (target-type) value

  //强制转换案例 int x=300; byte y; y = (byte)x;j

  2. 强制转换的问题

  另外强制转换除了可能的精度损失外,还可能使模(overall magnitude)发生变化。即如果整数的值超出了byte所能表示的范围,结果将对byte类型的范围取余数。

  例如a=257超出了byte的[-128,127]的范围,所以会将257除以byte的最大范围(256),然后得到余数b=1。需要注意的是,当a=200时,此时除去256取得的余数应该为-56,而不是200。

  //强制转换时模发生了变化 int a = 257; byte b; b = (byte) a; System.out.println("b=" + b);

  //b=1

  //a=200,余数=-56 int a = 200; byte b; b = (byte) a; System.out.println("b=" + b);

  //-56 将浮点类型赋给整数类型的时候,会发生截尾(truncation),也就是会把小数的部分去掉,只留下整数部分。此时如果整数超出目标类型范围,一样会对目标类型的范围取余数。

  //浮点赋值给整形,会截尾 float f=100.58f; int i; i=(int)f; System.out.println("i="+i);

  //100 强制转换时可能会导致溢出或精度的丢失。

  3. 表达式中的数据类型自动提升

  我们表达式中可能会有+、-、*、/等各种操作符,在执行这些表达式时,则可能会发生数据类型的自动提升,有以下规则:

  1)所有的byte、short、char型的值将被提升为int型;

  2)如果有一个操作数是long型,计算结果是long型;

  3)如果有一个操作数是float型,计算结果是float型;

  4)如果有一个操作数是double型,计算结果是double型。

  //表达式中的类型自动提升 byte b; b = 10;

  //因为此时b已经进行了类型提升,所以如果这里不进行强制类型转换则会报错

  //b=b*2;

  //此时必须进行强制类型转换 b=(byte)(b*3);System.out.println("b="+b);

  //b=30

  //类型提升为long int i=400; long l=500;

  //这样会报错

  //int x=i+l;

  //这样没问题 long x=i+l; System.out.println("x="+x);

  //x=900

相关文章

  • 北京总部地址:北京市海淀区宝盛北里西区28号中关村智诚科创大厦4层
    北京沙河校区:北京市昌平区沙阳路18号北京科技职业技术学院广场服务楼
    咨询电话:400-811-9990
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、云计算培训、全栈软件测试培训、大数据+人工智能培训、智能物联网+嵌入式培训、Unity游戏开发培训、Go语言开发培训、PHP全栈+服务器集群培训、网络安全培训、互联网营销培训、好程序员
    认证课程:软考、、PMP认证、红帽RHCE认证
  • 深圳校区地址:深圳市宝安区宝安大道5010号西部硅谷B座A区6层A605/B座C区1层108
    咨询电话:400-811-9990
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、云计算培训、全栈软件测试培训、大数据+人工智能培训、智能物联网+嵌入式培训、Unity游戏开发培训、Go语言开发培训、PHP全栈+服务器集群培训、网络安全培训、互联网营销培训、好程序员
    认证课程:软考、、PMP认证、红帽RHCE认证
  • 上海校区地址:上海市宝山区同济支路199号智慧七立方3号楼2-4层
    咨询电话:400-811-9990
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、云计算培训、全栈软件测试培训、大数据+人工智能培训、智能物联网+嵌入式培训、Unity游戏开发培训、Go语言开发培训、PHP全栈+服务器集群培训、网络安全培训、互联网营销培训、好程序员
    认证课程:软考、、PMP认证、红帽RHCE认证
  • 广州校区地址:广州市白云区永平街永泰学山塘学山文化创意谷A1栋六楼
    咨询电话:400-811-9990
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、云计算培训、全栈软件测试培训、大数据+人工智能培训、智能物联网+嵌入式培训、Unity游戏开发培训、Go语言开发培训、PHP全栈+服务器集群培训、网络安全培训、互联网营销培训、好程序员
    认证课程:软考、、PMP认证、红帽RHCE认证
  • 郑州二七区校区地址:郑州市二七区航海中路60号海为科技园C区10层
    郑州高新区校区地址:郑州市高新区金梭路与银杏路交叉口教育科技产业园南门D座4层
    咨询电话:400-811-9990
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、云计算培训、全栈软件测试培训、大数据+人工智能培训、智能物联网+嵌入式培训、Unity游戏开发培训、Go语言开发培训、PHP全栈+服务器集群培训、网络安全培训、互联网营销培训、好程序员
    认证课程:软考、、PMP认证、红帽RHCE认证
  • 大连校区地址:辽宁省大连市高新园区爱贤街10号大连设计城A座901
    咨询电话:400-811-9990
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、云计算培训、全栈软件测试培训、大数据+人工智能培训、智能物联网+嵌入式培训、Unity游戏开发培训、Go语言开发培训、PHP全栈+服务器集群培训、网络安全培训、互联网营销培训、好程序员
    认证课程:软考、、PMP认证、红帽RHCE认证
  • 武汉金融港校区地址:武汉市东新区光谷大道77号金融港B18栋三楼
    咨询电话:400-811-9990
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、云计算培训、全栈软件测试培训、大数据+人工智能培训、智能物联网+嵌入式培训、Unity游戏开发培训、Go语言开发培训、PHP全栈+服务器集群培训、网络安全培训、互联网营销培训、好程序员
    认证课程:软考、、PMP认证、红帽RHCE认证
  • 成都校区地址:成都市高新区肖家河沿街138号肖家河大厦三楼
    咨询电话:400-811-9990
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、云计算培训、全栈软件测试培训、大数据+人工智能培训、智能物联网+嵌入式培训、Unity游戏开发培训、Go语言开发培训、PHP全栈+服务器集群培训、网络安全培训、互联网营销培训、好程序员
    认证课程:软考、、PMP认证、红帽RHCE认证
  • 西安校区地址:西安市雁塔区高新六路52号立人科技C座西区4楼
    咨询电话:400-811-9990
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、云计算培训、全栈软件测试培训、大数据+人工智能培训、智能物联网+嵌入式培训、Unity游戏开发培训、Go语言开发培训、PHP全栈+服务器集群培训、网络安全培训、互联网营销培训、好程序员
    认证课程:软考、、PMP认证、红帽RHCE认证
  • 杭州旺田校区:浙江省杭州市江干区九堡旺田书画城A座4层
    咨询电话:400-811-9990
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、云计算培训、全栈软件测试培训、大数据+人工智能培训、智能物联网+嵌入式培训、Unity游戏开发培训、Go语言开发培训、PHP全栈+服务器集群培训、网络安全培训、互联网营销培训、好程序员
    认证课程:软考、、PMP认证、红帽RHCE认证
  • 青岛校区地址:青岛市市北区龙城路31号卓越世纪中心4号楼5层
    咨询电话:400-811-9990
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、云计算培训、全栈软件测试培训、大数据+人工智能培训、智能物联网+嵌入式培训、Unity游戏开发培训、Go语言开发培训、PHP全栈+服务器集群培训、网络安全培训、互联网营销培训、好程序员
    认证课程:软考、、PMP认证、红帽RHCE认证
  • 重庆校区地址:重庆市九龙坡区科园一路3号渝高大厦9楼
    咨询电话:400-811-9990
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、云计算培训、全栈软件测试培训、大数据+人工智能培训、智能物联网+嵌入式培训、Unity游戏开发培训、Go语言开发培训、PHP全栈+服务器集群培训、网络安全培训、互联网营销培训、好程序员
    认证课程:软考、、PMP认证、红帽RHCE认证
  • 长沙校区地址:湖南省长沙市岳麓区麓谷企业广场A2栋三单元306号
    咨询电话:400-811-9990
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、云计算培训、全栈软件测试培训、大数据+人工智能培训、智能物联网+嵌入式培训、Unity游戏开发培训、Go语言开发培训、PHP全栈+服务器集群培训、网络安全培训、互联网营销培训、好程序员
    认证课程:软考、、PMP认证、红帽RHCE认证
  • 哈尔滨校区地址:哈尔滨市松北区世泽路689号 科技创新城4号楼1101
    咨询电话:400-811-9990
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、云计算培训、全栈软件测试培训、大数据+人工智能培训、智能物联网+嵌入式培训、Unity游戏开发培训、Go语言开发培训、PHP全栈+服务器集群培训、网络安全培训、互联网营销培训、好程序员
    认证课程:软考、、PMP认证、红帽RHCE认证
  • 南京校区地址:南京市建邺区应天大街780号弘辉产业园1栋2层
    咨询电话:400-811-9990
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、云计算培训、全栈软件测试培训、大数据+人工智能培训、智能物联网+嵌入式培训、Unity游戏开发培训、Go语言开发培训、PHP全栈+服务器集群培训、网络安全培训、互联网营销培训、好程序员
    认证课程:软考、、PMP认证、红帽RHCE认证
  • 太原校区地址:太原市小店区长治路230号能源互联网大厦6层
    咨询电话:400-811-9990
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、云计算培训、全栈软件测试培训、大数据+人工智能培训、智能物联网+嵌入式培训、Unity游戏开发培训、Go语言开发培训、PHP全栈+服务器集群培训、网络安全培训、互联网营销培训、好程序员
    认证课程:软考、、PMP认证、红帽RHCE认证
  • 沈阳校区地址:辽宁省沈阳市浑南区世纪路16号东大软件园B园B1座A201
    咨询电话:400-811-9990
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、云计算培训、全栈软件测试培训、大数据+人工智能培训、智能物联网+嵌入式培训、Unity游戏开发培训、Go语言开发培训、PHP全栈+服务器集群培训、网络安全培训、互联网营销培训、好程序员
    认证课程:软考、、PMP认证、红帽RHCE认证
  • 合肥校区地址:合肥市包河区徽州大道396号东方广场B座12A
    咨询电话:400-811-9990
    面授课程:HTML5大前端培训、JavaEE+分布式开发培训、Python全栈+人工智能培训、全链路UI/UE设计培训、云计算培训、全栈软件测试培训、大数据+人工智能培训、智能物联网+嵌入式培训、Unity游戏开发培训、Go语言开发培训、PHP全栈+服务器集群培训、网络安全培训、互联网营销培训、好程序员
    认证课程:软考、、PMP认证、红帽RHCE认证
  • 千锋教育服务号

    关注千锋学习站小程序
    随时随地免费学习课程

  • 千锋教育移动站

    扫一扫快速进入
    千锋移动端页面

  • 千锋互联服务号

    扫码匿名提建议
    直达CEO信箱