短手赋值运算符,+ =,真意?

时间:2013-05-03 15:03:01

标签: java assignment-operator shorthand implicit-cast

我了解到i+=2i=i+2的简称。但现在我怀疑它。 对于以下代码,上述知识没有用处:

  

byte b=0;       B = B + 2; //错误:必需字节,找到int

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

但是,以下代码运行良好:

  

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

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

2 个答案:

答案 0 :(得分:10)

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

  

形式E1 op = E2的复合赋值表达式是等价的   到E1   =(T)((E1)op(E2)),其中T是E1的类型,但E1只被评估一次。

所以你几乎是正确的,除了添加一个演员表。在你的情况下: b+=2;符合b=(byte)(b+2);

的资格

答案 1 :(得分:0)

来自C ++背景,我可以尝试声称这个概念是相似的。运算符+=被定义为左侧对象的方法,将对象作为参数传递给它的右侧。这使得该语言的编写者抛出类型转换和兼容性修复等内容变得微不足道。唯一的事情是,据我所知,Java不允许用户重载操作符函数