`````
byte a,b,c;
a=1;
b=2;
c=a+b;
```````
前后都省略了  就是 这里出问题了 为什么  a b c 为同类型 但是  a+b 给C赋值的时候 需要强制类型转换求帮忙 告诉我下 原理···

解决方案 »

  1.   

    JAVA本质上没有byte类型,你这里的a, b,c其实都是int型的
      

  2.   

    无论是short,char还是byte 它们在进行相加的时候都是自动转型为int型。JVM在把byte数据压入栈中的时候,会自动将byte数据的最高位,就是按照符号位增添24位,加上自身的8位,一共32位,构成int型。事实上java的数据运算不都是有自动向上转型么,有double转成double,有long转成long,有float转成float
      

  3.   

    a=1;b=2;c=a+b;
    首先你已经把a和b都赋值成了int型的值了
    然后你把结果相加还是int型的 再付给byte型的c当然要转型啦
      

  4.   

    晕  不能因为是1,2就认为是int型,你怎么不把它说成是short型呢?int short byte它们的存储范围不一样,你能看出来1就是int型?!能看出来1在内存中是32位存储的?我还说1是16位存储的呢。那岂不就成了short了!
    所以具体是什么型的还要看在内存中的存储情况,就像2楼分析的一样,JVM为了避免我说的情况,就将所有的byte或者是short都自动升级为int类型
      

  5.   

    那么这么说的话 java中的 数据转换陷阱还挺多啊希望帮忙下  都哪些类型 可以隐式转换 如果按3楼的解释 是不是  如果我定义2个  char 或者 short 类型的变量 如果想加 后 结果就变成了 int型?
      

  6.   

    byte 型,是要自动提升为int型的,要想得到byte型值,必须强转!!!
      

  7.   

    在运算的时候,无论是short,char还是byte 它们在进行相加的时候都是自动转型为int型再进行运算的,再向它们赋值的时候肯定要进行强制转换的,不然会报错哦
      

  8.   

    JAVA的原生数据是按照一定顺序转换的
    byte,short或者char->int->long->float->double
    按照就近原则转换,byte short char三种类型属于同一层次,所以相加的时候自然就近转换为int型,同样如果一个int 与long相加,就会自动转换为long,这样就不损失精度了