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

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

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

当前位置:首页  >  技术干货  > Java基本类型之间是如何进行转换的?

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

来源:千锋教育
发布人:wjy
时间: 2022-07-01 16:54:00 1656665640

  1. 类型转换

  在Java中,将一种类型的值赋给另一种类型是很常见的,在这个赋值过程中有可能会进行类型的转换,转换分为自动转换和强制转换。自动类型转换(隐式转换)无需进行任何操作,而强制类型转换则需要显式转换,即需要使用强制转换操作符(type)。

  注意:

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

  2. 自动转换

  2.1 自动转换时机

  那么什么时候会进行自动转换呢?

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

  首先我们将7种类型按下面从小到大的顺序排列一下:

  byte < (short=char) < int < long < float < double

  这里我们所说的"大"与"小",并不是指占用的字节多少,而是指表示值的范围的大小。

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

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

  2.2 自动转换时的精度损失

  除了以下几种情况可能会导致精度损失以外,其他的转换都不会出现精度损失。

  int--> floatlong--> floatlong--> doublefloat -->double without strictfp

  除了可能的精度损失外,自动转换时不会出现任何运行时异常。

  3. 强制转换

  3.1 强制转换语法

  如果要把"大"的转成"小"的,或者在short与char之间进行转换,就必须进行强制转换,也被称作缩小转换(narrowing conversion),因为必须显式地使数值变得更小 以适应目标类型。严格地说,将byte转为char不属于缩小转换narrowing conversion,因为从byte到char的过程其实是byte-->int-->char,也就是既有扩宽操作widening,也有缩小操作narrowing。强制转换时需要采用转换操作符(目标基本类型),格式如下:(target-type) value

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

 

  3.2 强制转换的问题

  另外强制转换除了可能的精度损失外,还可能使模(overall magnitude)发生变化。即如果整数的值超出了byte所能表示的范围,结果将对byte类型的范围取余数。例如a=257超出了byte的[-128,127]的范围,所以会将257除以byte的最大范围(256),然后得到余数b=1。需要注意的是,当a=200时,此时除去256取得的余数应该为-56,而不是200。

 

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

 

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

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

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

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

  我们表达式中可能会有+、-、*、/等各种操作符,在执行这些表达式时,则可能会发生数据类型的自动提升,有以下规则:1所有的byte、short、char型的值将被提升为int型;2如果有一个操作数是long型,计算结果是long型;3如果有一个操作数是float型,计算结果是float型;4如果有一个操作数是double型,计算结果是double型。

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

  更多关于“Java培训”的问题,欢迎咨询千锋教育在线名师。千锋已有十余年的培训经验,课程大纲更科学更专业,有针对零基础的就业班,有针对想提升技术的好程序员班,高品质课程助力你实现java程序员梦想。

tags:
声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT