问:不同数据类型的转换有哪些规则?
答:在Java语言中,当参与运算的两个变量的数据类型不同时,就需要进行隐式的数据类型转换,转换的规则为:从低精度向高精度转换,即优先级满足byte<short<char<int<long<float<double,例如,不同数据类型的值在进行运算时,short类型数据能够自动转为int类型,int类型数据能够自动转换为float类型等。反之,则需要通过强制类型转换来实现。
在Java语言中,类型转换可以分为以下几种类型:
- 类型自动转换
低级数据类型可以自动转换为高级数据类型,下表给出了常见的自动类型转换的规则:
当类型自动转换时,需要注意以下几点:
1)char类型的数据转换为高级类型(如int,long等),会转换为其对应的ASCII码。
2)byte、char、short类型的数据在参与运算时会自动转换为int型,但当使用“+=”运算时,就不会产生类型的转换。
3)另外,在Java语言中,基本数据类型与boolean类型是不能相互转换的。
总之,当有多种类型的数据混合运算时,系统会先自动地将所有数据转换成容量最大的那一种数据类型,然后再进行计算。
- 强制类型转换
当需要从高级数据类型转换为低级数据类型时,就需要进行强制类型转换,下表给出了强制类型转换的规则。
需要注意的是,在进行强制类型转换时可能会损失精度。
常见笔试题:
- 对于下述代码结果强制类型转换后,变量a和b的值分别为()。
Short a=128;
byte b=(byte)a
答案:a=128,b=-128。short类型变量占两个字节,a对应的二进制为:0000000010000000,由于byte只占一个字节,在强制转换为byte的时候只截取低字节:10000000,10000000是-128的补码,因此b的值为-128。