Notice



/*
对于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;//错误写法,只有右侧全是常量的时候,编译器自动才会优化,不能有任何变量
    }
}

 

 

 

上一篇:WPF 修改屏幕亮度


下一篇:【论文笔记2】Long-Short Transformer: Efficient Transformers for Language and Vision