请各位帮忙解决一个数据类型的小问题,如果问题太简单请大家不要喷我,我是新手。public static void main(String[] args)
{
byte b1=3,b2=4,b;
b=b1+b2;
                  b=3+4;
System.out.println("b="+b);
}在上面的的小程序中b=3+4;是正确的
而b=b1+b2;是错误的。   这个令我很不解,请指点在b=b1+b2;中b是byte类型的,b1,b2也是byte类型的,怎么能出现损失精度呢?
在b=3+4;中 b是byte类型的,3,4都是int类型的,也没看到有类型提升啊,怎么可以通过呢?

解决方案 »

  1.   

    byte、short、char类型数据运算后结果自动转为int类型。所以你想将b1、b2两个的运算结果赋给一个byte类型的b。就得强制转换
      

  2.   

    “b=3+4;”像这样,如果直接使用数字来进行运算的话,如果最后运算的结果不超出b所声明的数据类型的表示范围的话,不会报错。
    byte b;
    b = 128 + 0; //Type mismatch: cannot convert from int to byte
    b = 128 - 1; //不报错
      

  3.   

    byte b1=3,b2=4,
    b=b1+b2;
    byte类型的值和任何类型的值相加都会自动提升类型,本例中会自动提升为int型。
    需要强制类型转换  b=(byte)(b1+b2);
    给你举个例子:byte a=-2;
                  byte b=-a;
    这个也会报错,对byte型取负会自动提升为int,所以要强制转换。