class Rk 
{
public static void main(String[] args)
{
byte a=4;
byte b=3;
byte ab=a+b;
System.out.println(ab);
}
}
为啥会损失精度呢?

解决方案 »

  1.   

    在java中,byte类型的数据实质上是按照int类型存储的,byte ab = (byte) (a+b);这样才对,否则你的程序无法通过编译,其实不存在什么精度损失。
      

  2.   

    是的啊编译的时候报说是 无法从int转成byte的
      

  3.   

    相加的话,会把byte转成int,之后再相加,结果不是byte,所以要进行强转
      

  4.   

    byte占一字节,int占4字节,byte型的数据在参与运算时会自动转换成int型,这是Java中的规定。
    在a+b的时候,a和b已经都偷偷转换成int型了,所以它们相加得到的和也是int型的。
    因为int比byte型占的字节数多,能够表示的精度高,所以当你试图将(a+b)这个int值赋值给byte型的ab时,系统担心会损失精度,因此编译无法通过。除非你这样写:(byte) (a + b)
    这样系统认为你已经考虑到了丢失精度的风险,也就是说,你在向系统打保证:“哥心里清楚这样写没问题!”,然后系统就放心了,允许编译通过。
    这下明白了吧……
      

  5.   

    看看Java在基本数据类型计算的转换规则就明白了。