public class Test1
{
public static void main(String[] args)
{
byte b=3;
b=b+2;
System.out.println(b);
}
}
以上例子用命令行执行,会报"可能损失精度"这样的错误。
为什么b=b+2会出错?为什么b=3又不会呢?
如图所示,由于b为byte类型,1个8位,b与2(4个8位)相加时,默认会自动转为整型变量int,所以(b+2)为int类型(4个8位),将(b+2)的结果赋值给b,就相当于将能装32个苹果的篮子倒向只能装8个苹果的篮子里,所以报错"可能损失精度"。而3虽然是整形,但是3常量,值是确定的,在赋值给b时,会自动判断是否满足其范围,但是b是变量,值是不确定的,没法判断其值的大小,有可能会导致损失精度,所以会报错。
解决办法:只要把(b+2)强制转换为byte类型就可以了,b=(byte)(b+2) (但是强制转换类型,容易损失精度)