2013-05-03 70 views
5

我了解到i+=2i=i+2的简称。但现在我怀疑它。 对于下面的代码,上述知识没有保持良好:短手赋值运算符,+ =,真含义?

byte b=0; b=b+2; //Error:Required byte, Found int

上面的代码是合理的,因为2int类型和表达式返回int值。

但是,下面的代码罚款运行:

byte b=0; b+=2; //b stores 2 after += operation

这迫使我怀疑+=短手操作有些比我知道的。 请赐教。

+0

请参阅:http://stackoverflow.com/questions/7038012/typecasting-with-shorthand-operators – 2013-05-03 15:07:31

+2

没有用处在回答存在良好答案时。检查[这一个](http://stackoverflow.com/questions/8710619/java-operator)。那里覆盖了这个问题。 – Gamb 2013-05-03 15:08:25

回答

10

如果有疑问,您可以随时检查Java语言规范。在这种情况下,相关部分是15.26.2,复合分配运算符。

A compound assignment expression of the form E1 op= E2 is equivalent to E1 = (T) ((E1) op (E2)), where T is the type of E1, except that E1 is evaluated only once.

所以你几乎是正确的,除了添加了演员阵容。你的情况: b+=2;有资格b=(byte)(b+2);

+0

简洁明了+1 – 2013-05-03 15:10:37

+0

据此不会还算2还算是int吗?填充占位符,我读为b =(byte)b + 2; – 2013-05-03 15:11:02

+0

所以'i + = 2'符合'i =(类型i)(i + 2)'。谢谢:) – 2013-05-03 15:12:58

0

从C++背景的,我可以尝试声称,这个概念是相似的。运算符+=被定义为其左侧的对象方法,将该对象作为参数传递给右侧。这使得语言的作者抛出诸如类型转换和兼容性修补这样的东西变得微不足道。据我所知,唯一的事情是Java不允许用户超载运算符功能