2012-04-25 37 views
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 

found:int required:byte b = b + 10; ^ 1错误

但是没有如果尝试这样的事情

b++; 
b+=10; 

这是完全正常的 是什么原因?

+2

[why byte + = 1 compile but byte = byte + 1 not?]的可能重复(http://stackoverflow.com/questions/4969339/why-byte-1-compile-but-byte-byte-1 - 不) – axtavt 2012-04-25 07:36:19

+0

这只是一个近似重复的这个问题。另一个问题是“什么在Java语言定义导致这种行为?”,而这个问题是“这种行为的原因是什么”,要求动机的语言定义。 – 2012-04-25 07:42:51

回答

2

你必须写你的原始代码

b = (byte)(b + 10); 

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

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

Java设计者决定在这种情况下应该在int中执行加法,所以120 + 10是130.然后它不能被存储到一个字节中。

对于b+=10,很明显你想修改b,所以它是一个字节的加法。

1

那么它说:possible loss of precision因为编译器认为可能会增加10至b后,可能byte大小的限制去了,但是当你使用b++b+=10它不是只是增加10typcasting它会自动如此以在编译器级确认b的值不超出byte大小的限制。

相关问题