AVA学习笔记之变量类型转换和类型自动提升
![此博文包含图片](https://i-blog.csdnimg.cn/blog_migrate/a4c26d1e5885305701be709a3d33442f.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a4c26d1e5885305701be709a3d33442f.gif)
变量的类型转换
如果下列2个条件都能满足,那么将一种类型的数据赋给另外一种类型变量时,将执行
自动类型转换(automatic type conversion):
· 这2种类型是兼容的。
· 目的类型数的范围比来源类型的大。
当以上2个条件都满足时,拓宽转换(widening conversion)发生。例如,int型的范围比所有byte型的合法范围大,因此不要求显式强制类型转换语句。对于拓宽转换,数字类型,包括整数(integer)和浮点(floating-point)类型都是彼此兼容的,但是,数字类型和字符类型(char)或布尔类型(bollean)是不兼容的。字符类型(char)和布尔类型(bollean)也是互相不兼容的。
2.不兼容类型的强制转换(强制类型转换)
完成两种不兼容类型之间的转换,你就必须进行强制类型转换。所谓强制类型转换只不过是一种显式的类型变换。它的通用格式如下:
(target-type)value
其中,目标类型(target-type)指定了要将指定值转换成的类型。将int型强制转换成byte型。如果整数的值超出了byte型的取值范围,它的值将会因为对byte型值域取模(整数除以byte得到的余数)而减少。当把浮点值赋给整数类型时一种不同的类型转换发生了:截断(truncation)。整数没有小数部分,当把浮点值赋给整数类型时,它的小数部分会被舍去。
类型自动提升
在JAVA表达式中,如果进行运算的几个变量类型不一致,JAVA表达式会采取类型自动提升的操作。在表达式中对中间值的精确要求有时超过任何一个操作数的范围:
但有时也会带来意想不到的情况:
该程序试图将一个完全合法的byte型的值50*2再存储给一个byte型的变量。但是当表达式求值的时候,操作数被自动地提升为int型,计算结果也被提升为int型。这样,表达式的结果现在是int型,不强制转换它就不能被赋为byte型。确实如此,在这个特别的情况下,被赋的值将仍然适合目标类型。
在你理解溢出的后果的情况下,你应该使用一个显式的强制类型转换
类型提升的约定
1、将所有byte short 提升到int
2、如果操作数中有一个long,整个表达式提升到long型;