Java的+ =, – =,* =,/ =复合赋值运算符

问题:

直到今天,我以为是这样的:

i += j;

只是一个捷径:

i = i + j;

但是如果我们尝试这样做的话:

int i = 5;
long j = 8;

那么i = i + j;将不会编译,但是i += j;会编译好。
这是否意味着事实上i += j;是这样的快捷方式
 i = (type of i) (i + j)

回答:

一如以往的这些问题,JLS的答案。在这种情况下§15.26.2 Compound Assignment Operators。摘录:

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

§15.26.2引用的例子

[…]以下代码是正确的:
并导致x的值为7,因为它相当于:

换句话说,你的假设是正确的。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Java’s +=, -=, *=, /= compound assignment operators

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

70 − 63 =