类型转换规则
在Java语言中,当参与运算的两个变量的数据类型不同时,就需要进行隐式的数据类型转换,转换的规则是:从低精度向高精度转换即优先级满足:
byte < short < char < int < long < float < double
例如,不同数据类型的值进行运算时,short 类型数据能够自动转换为 int 类型, int 类型数据能够自动转换为 float 类型等。反之,则需要通过强制类型装换来实现。
类型自动转换
操作数1的类型 | 操作数2的类型 | 转换后的类型 |
---|---|---|
long | byte short char int | long |
int | byte short char | int |
float | byte short char int long | float |
double | byte short char int float | double |
当类型自动转换时,需要注意以下几点:
- char类型的数据转换为高级类型,会转换为其对应的ASCII码。
- byte char short 类型的数据在参与运算时会自动转换为int型,但当使用“+=”运算时,就不会产生类型的转换。
- 基本数据类型与boolean类型是不能相互转换的
强制类型转换
操作数1的类型 | 操作数2的类型 |
---|---|
byte | char |
char | byte char |
short | byte char |
int | byte short char |
long | byte short char int |
float | byte short char int long |
double | byte short char int float double |
short a = 128;
byte b = (byte)a;
a = 128,b = -128。short类型变量占两个字节,a对应的二进制为:0000000010000000,由于byte只占一个字节,在强制转换为byte的时候只截取低字节:10000000,10000000是-128的补码,因此b的值为-128。
Java余元在设计byte、short和char类型的运算时,首先会把这些类型的变量值强制转换为int类型,然后对int类型的值进行计算,最后得到的值也是int类型。
如果把两个byte值相加最后会得到一个int类型的值,如果想得到short类型的结果,必须要显示转换为short类型。
short s1 =1;
s1 = s1+1;//这句编译器会报错
s1 = (short) (s1+1);//这句是正确的
s1 +=1;//这句java编译器会对其进行特殊处理,可以编译通过。