在Java中,整型的字面量默认为int型,浮点型的字面类默认为double型。
基本数据类型(除了boolean型)之间的运算,遵循以下的规则:
- 两个不同类型的变量进行运算时,变量的类型会根据规则发生自动转换。
- char、byte、short ---> int ---> long ---> float ---> double
- 上式中,越右边的变量,可以容纳的数值范围越大。两个不同类型的变量进行运算时,相对数值范围小的变量类型,自动转换为数值范围大的变量类型,再进行运算,结果为数值范围大的变量类型。
- 特别地,char、byte、short之间运算时,均转换成int型再运算,运算结果为int型。
基本数据类型(除了boolean型)的赋值,遵循以下的规则:
- char、byte、short ---> int ---> long ---> float ---> double
- 容纳的数值范围小的变量,可以给容纳的数值范围更大的变量赋值,不允许给容纳的数值范围更小的变量赋值。如int型的变量可以给double型变量赋值,不能给byte型变量赋值。
- 若想要将范围大的变量赋值给范围小的变量,需要使用强制转换,此时数据精度可能会丢失。
关于字面量与变量的运算:
- char、byte、short型变量与整型字面量运算时,char、byte、short型变量会转换成int型变量,结果也是int型。同理,与浮点型字面量进行运算时,结果为double型。
- 特别地,使用+=等复合运算符时,不需要再进行强制转换。
最后,关于整型字面量与整型字面量运算,再赋值给char、byte、short型变量:
- 若字面量的结果没有超出变量的范围,则不报错,否则会报错。
注:以上笔记是笔者自己的理解,并非标准定义,如有错误,欢迎指出,不甚感激!