当前位置: 代码迷 >> J2SE >> 跨入JAVA江湖一个月,一直不明白为什么这样会损失精度?各位大叔大妈速来指教指教
  详细解决方案

跨入JAVA江湖一个月,一直不明白为什么这样会损失精度?各位大叔大妈速来指教指教

热度:107   发布时间:2016-04-23 22:50:02.0
踏入JAVA江湖一个月,一直不明白为什么这样会损失精度?各位大叔大妈速来指教指教

class Rk 
{
public static void main(String[] args)
{
byte a=4;
byte b=3;
byte ab=a+b;
System.out.println(ab);
}
}



为啥会损失精度呢?

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