public class Test {
   
  pubilc static void main(String[] args) {
                   
                byte a = 5;
                a = a + 5;//erro;
                byte b = 5;
                b += 5;//没问题
  }}为什么是这样的情况。。???求。。运行机制。。

解决方案 »

  1.   

    这是类型转换的问题 ,我来给你分析一下哈 首先你要知道,在栈内保存是没有,byte,char,short 类型的 ,他们都被扩展为 int类型存于栈中,来说下这个过程   byte a = 5 声明a为 byte类型 ,运算的时候 byte被转换为int类型 ,所以                byte a = 5;
                    a = a + 5;//erro;
    是错的 ,因为 a+5是int类型 。 需要把 a+5强制转换为 byte 类型;              byte b = 5;
                 b += 5;//没问题
    运行的时候会存在一个隐式的类型转换,整个过程是相同的 也是按照 int计算的,不过,存在一个隐士的转换由虚拟机实现。   就相当于       byte  b=5 ;
           b=(byte)b+5;
      

  2.   

    注意一点就行了 ,只有在堆中 类型byte char short 表示为自己的类型,其它情况都表示为 int
      

  3.   


    还记得这个不,经典面试题:short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?答:short s1 = 1; s1 = s1 + 1; (s1+1运算结果是int型,需要强制转换类型)   
        short s1 = 1; s1 += 1;(可以正确编译)
      

  4.   

    type a = 1;
    a += value;
    <==>a = (type)(a+value);
      

  5.   

    int型到byte需要强制类型转换
      byte a = 5;
                    a = a + 5;a+5后变为int行,需要变为:a=(byte)(a+5)
                    byte b = 5;
                    b += 5;//没问题