我正在尝试像这样的一些java代码
class Test {
public static void main (String [] args){
byte b = 10;
b = b + 10;
}
}
保存后,当我尝试编译它时,它给了我一个错误
D:\java\Test.java:4: possible loss of precision
发现:int 必需:字节 b = b + 10; ^ 1错误
但是如果尝试这样的话就没有了
b++;
b+=10;
完全没问题 这是什么原因?
答案 0 :(得分:2)
您必须将原始代码编写为
b = (byte)(b + 10);
问题是b + 10
的类型是int,因为字节被扩展为int。
这样做的原因是存在概念模糊性,如果b是120,那么b + 10等于130,还是等于-126?
Java设计者决定在这种情况下应该在int中执行添加,因此120 + 10是130.然后它不能存储到一个字节中。
对于b+=10
,很明显你想修改b,所以它是一个字节加法。
答案 1 :(得分:1)
好吧它说possible loss of precision
因为编译器认为可能在向b
添加10之后可能会超过byte
大小,但是当你使用时b++
或b+=10
不是只是添加10
而是typcasting
它会自动添加,以便在编译器级别确认{{1}的值}}不超出b
大小的限制。