1

我正在尝试一些这样的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;

完全没问题这是什么原因?

4

2 回答 2

2

您必须将原始代码编写为

b = (byte)(b + 10);

问题是它b + 10是 int 类型的,因为字节被扩展为 int。

这样做的原因是存在概念上的歧义,如果 b 是,比如说,120。那么 b+10 等于 130,还是等于 -126?

Java 设计者决定在这种情况下应该在 int 中进行加法,这样 120+10 就是 130。那么它就不能存储到一个字节中。

对于b+=10,很明显要修改b,所以是字节加法。

于 2012-04-25T07:38:43.180 回答
1

好吧,它说possible loss of precision是因为编译器认为可能在向其添加 10 之后b可能会超出byte大小限制,但是当您使用时b++,或者b+=10它不仅会自动添加10,而且还会typcasting自动添加,以便在编译器级别确认 的值b不会超出限制的byte大小。

于 2012-04-25T07:38:40.687 回答