对海尔网站建设水平的评价,网站添加cnzz,大学新校区建设网站,河南省建设厅网站136号文件优化1 对于byte/short/char三种类型来说#xff0c;如果右侧赋值的数值没有超过范围#xff0c;那么javac编译器将会自动隐含地为我们补上一个(byte)(short)(char)。 如果没有超过左侧的范围#xff0c;编译器补上强转。如果右侧超过了左侧范围#xff0c;那么直接编译器报… 优化1 对于byte/short/char三种类型来说如果右侧赋值的数值没有超过范围那么javac编译器将会自动隐含地为我们补上一个(byte)(short)(char)。 如果没有超过左侧的范围编译器补上强转。如果右侧超过了左侧范围那么直接编译器报错。代码举例 public class Demo12Notice {public static void main(String[] args) {// 右侧确实是一个int数字但是没有超过左侧的范围就是正确的。// int -- byte不是自动类型转换byte num1 /*(byte)*/ 30; // 右侧没有超过左侧的范围System.out.println(num1);// byte num2 128; // 右侧超过了左侧的范围直接报错// int -- char没有超过范围// 编译器将会自动补上一个隐含的(char)char zifu /*(char)*/ 65;System.out.println(zifu);}
} 执行结果 优化2 在给变量进行赋值的时候如果右侧的表达式当中全都是常量没有任何变量那么编译器javac将会直接将若干个常量表达式计算得到结果。例如short result 5 8; // 等号右边全都是常量没有任何变量参与运算编译之后得到的.class字节码文件当中相当于【直接就是】short result 13;右侧的常量结果数值没有超过左侧范围所以正确。这称为“编译器的常量优化”。但是注意一旦表达式当中有变量参与那么就不能进行这种优化了。 代码举例 public class Demo13Notice {public static void main(String[] args) {short num1 10; // 正确写法右侧没有超过左侧的范围short a 5;short b 8;// short short -- int int -- int// short result a b; // 错误写法左侧需要是int类型// 右侧不用变量而是采用常量而且只有两个常量没有别人short result 5 8;System.out.println(result);// short result2 5 a 8; 错误不能常量优化}
} 执行结果 转载于:https://www.cnblogs.com/wurengen/p/11204352.html