java中的类型转换分为:自动类型转换(隐式类型转换)和强制类型转换(显式类型转换)。
java中的数值类型的转换方向:
byte(short、char)->int->long->float->double
- 从右到左不能发生自动类型转换(int自动可转成左边的三种类型,弹但要注意不能超过左边数据类型的范围)。
- byte、short和char都是先转换成int再进行操作。
自动类型转换
当遵循以下规则时,会发生自动类型转换:
- 当中数据类型是兼容的。
- 转换前的数据类型(源类型)的范围要小于转换后的数据类型(目标类型)的范围。
注意:
- 在发生隐式类型转换时,也有可能发生精度的丢失,比如长整型转为浮点数。
float num4 = 1234567890L;
System.out.println(num4);//输出1.23456794E9,即1234567940
-
隐式类型转换对于表达式类型有提升功能
在表达式的运算中如果涉及到多种数据类型,最终表达式类型以最高的数据类型为准。
且要将最高的数据类型先运算,这样可以避免在中间计算时超出范围。
3.boolean类型不能和其他数据类型发生类型转换
强制类型转换
如果不能发生自动类型转换,就需要使用强制类型转换。
语法: (目标数据类型) 源数据
注意:
- 强制类型转可能丢失精度(由高的数据类型转成小的数据类型)
- 源数据类型与目标类型需要兼容,否则发生错误。