我了解到这i+=2
是i=i+2
. 但现在我对此表示怀疑。对于下面的代码,上面的知识没有用:
byte b=0;
b=b+2;//Error:Required byte, Found int
上面的代码是有道理的,2
类型int
和表达式返回int
值也是如此。
但是,以下代码运行良好:
byte b=0; b+=2; //b stores 2 after += operation
这迫使我怀疑+=
速记运算符比我知道的要多一些。请赐教。
我了解到这i+=2
是i=i+2
. 但现在我对此表示怀疑。对于下面的代码,上面的知识没有用:
byte b=0;
b=b+2;//Error:Required byte, Found int
上面的代码是有道理的,2
类型int
和表达式返回int
值也是如此。
但是,以下代码运行良好:
byte b=0; b+=2; //b stores 2 after += operation
这迫使我怀疑+=
速记运算符比我知道的要多一些。请赐教。
如有疑问,您可以随时查看 Java 语言规范。在这种情况下,相关部分是 15.26.2,复合赋值运算符。
E1 op= E2 形式的复合赋值表达式等价于 E1 = (T) ((E1) op (E2)),其中 T 是 E1 的类型,除了 E1 只计算一次。
所以你几乎是正确的,除了添加了演员表。在你的情况下:
b+=2;
有资格b=(byte)(b+2);
来自 C++ 背景,我可以尝试声称这个概念是相似的。操作符+=
被定义为其左侧对象的方法,将右侧对象作为参数传入。这使得语言的编写者可以轻松地投入诸如类型转换和兼容性修复之类的东西。唯一的是,据我所知,Java 不允许用户重载运算符函数