当一个算数表达式中包含多个基本数据类型(boolean除外)的值时,整个算数表达式的数据类型将在数据运算时出现类型自动提升,其规则就是:
所有的byte、short、char类型被自动提升到int类型;(这也是在自动转换时所说的,一般直接将byte、short、char赋给int类型的意思)。
整个表达式的最终结果类型被提升到表达式中类型最高的类型;
例如:double d = 123 + 1.2F + 99L +3.14;
也就是说两个操作数中选大类型的,从左往右依次进行,表达式最终结果的类型就是所有操作数类型最高的操作数的类型。
再来看几行代码。
这是为什么,之前说到,byte b = 25;是编译器底层偷偷转换,为什么执行 b = b + 4;这行代码就报错?
这是因为byte b = 25;是直接赋值,编译时期编译器就察觉,然后偷偷转换,但是b = b + 4;而这行代码要在运行时期才能算出来,所以会出现错误。