数值类型中JDk的编译期检查和编译期优化

        byte b1 = 5;//编译期检查,判断是否在byte范围内
        byte b2 = 5+4;//编译期优化,相当于b2=9
        byte b3 = 127;//编译通过,在byte范围内
        byte b4 = 128;//编译错误,超出byte范围
//        byte b1 = 5;
//        byte b2 = 4;
//        byte b3 = b1+b2; //类型提升为int类型

  本文章以byte类型赋值来谈谈java编译期的优化和检查:

  整数类型的字面量是int类型,所以第一行代码中的5是int类型,但是一个int类型的常量怎么可以赋值给byte类型呢?因为编译器在编译的时候会对5进行检查, 判断是否在byte的取值范围内,如果是就把int转为byte,否则报错。

  对于第二行代码,编译器在编译时会进行优化,把5+4替换成9付给b2.类似的优化还有字符串。如 String s = "a"+"b";等价于:String s = "ab";

  两个byte类型的变量运算后数据类型提升为int,编译器无法做优化,因为编译器不确定变量的值,从而无法判定变量预算后的结果是否在byte范围内,安全起见,只能提升为int。

posted @ 2017-04-04 19:30  得瑟的土匪  阅读(287)  评论(0编辑  收藏  举报