byte b1 = 1;//整数常量默认不是int的吗,为什么不用显示转换
byte b2 = 2;
byte b3 = 1+2;//编译通过,1+2不是int的吗,为什么不用显示转换
byte b4 = b1+b2;//编译不通过,为什么编译不通过
int b5 = b1+b2;//编译通过,为什么编译通过是不是被JVM优化了,只是猜测,哪位前辈能给个肯定的回答

解决方案 »

  1.   

    byte b1 = 1;//这是赋值,这个1不是你说的常量,b1才是常量
    byte b2 = 2;
    byte b3 = 1+2;//同上
    byte b4 = b1+b2;//已经超过byte的范围
    int b5 = b1+b2;//这个你懂的三。
      

  2.   


    byte b4 = (byte)(b1+b2);因为b1和b2都是变量,编译的时候不知道类型要强转。还有1当然是常量,b1是变量好不好
      

  3.   

    b1,b2在前边我已经定义为了byte,应该不是编译时不知道类型谢谢,楼上朋友给出的答案,我刚才找到老师以前的课件,问题解决了:
    1.整数字面量(直接量) 默认是int类型, 如果不超出范围, 可以给小类型直接赋值.
    2.使用整数类型(byte, short, int) 要注意取值范围, 超范围运算java 底层byte,short 按照32位计算
      

  4.   

    sorry,搞错了。b1是变量,不是常量。但这个1也不是常量,是常数。