/* 对于byte/short/char三种类型来说,如果右侧赋值的数值没有超过范围, 那么javac编译器将会自动隐含的为我们不上一个(byte)(short)(char)。 1如果右侧没有超过左侧的范围,编译器补上强转。 2如果右侧超过左侧的范围,那么编译器直接报错。 在给变量进行赋值的时候,如果右侧的表达式当中全是常量,没有任何变量, 那么编译器javac将会直接将若干个常量表达式计算得到结果。 这称为编译器的常量优化。 */ public class Notice{ public static void main(String[] args){ //右侧确实是一个int数字,但是没有超过左侧的范围,就是正确的。 //int --> byet,不是自动类型转换 byte num1 = /*(byte)*/30;//右侧没有超过左侧范围 System.out.println(num1);//30 //byte num2 = 128;右侧超过了左侧的范围,编译报错 //int --> char 没有超过左侧的范围编译器将会补上一个隐含的(char) char zifu = 65; System.out.println(zifu);//A short num3 = 10; short a = 5; short b = 8; //short + short --> int + int -->int //short result = a + b;//错误写法左侧需要的是int类型 short result = 3 + 8; System.out.println(result);//右侧不用任何变量,而是采用常量,而且只有两个常量,没有别人 //short result = 5 + a + 8;//错误写法,只有右侧全是常量的时候,编译器自动才会优化,不能有任何变量 } }