byte num1 = /(byte)/ 30;
右侧确实是一个int数字,但是没有超过左侧的范围,正确
对于byte/short/char三种类型来说,如果右侧赋值的数值没有超过左侧范围,那么javac编译器将会自动隐含地为我们补上一个(byte)(short)(char)
1.如果没有超过左侧的范围,编译器自动补上强转。
2.如果右侧超过了左侧范围,那么直接编译器报错。
short a = 5;
short b = 10;
// short + short --> int + int --> int
short + result = a + b; // 错误写法!左侧需要是int类型
short result = 5 + 8; 右侧全是常量
编译之后,得到的.class字节码文件当中相当于直接就是:short result = 13;
这称为编译器的常量优化。
一旦表达式当中有变量,则不能进行常量优化。