直到今天,我还在想,举个例子:
i += j;
只是一条捷径:
i = i + j;
但如果我们try 一下:
int i = 5;
long j = 8;
那么i = i + j;
将不会编译,但i += j;
将编译得很好.
这是否意味着事实上i += j;
是这样的捷径
直到今天,我还在想,举个例子:
i += j;
只是一条捷径:
i = i + j;
但如果我们try 一下:
int i = 5;
long j = 8;
那么i = i + j;
将不会编译,但i += j;
将编译得很好.
这是否意味着事实上i += j;
是这样的捷径
与这些问题一样,JLS掌握着答案.在这种情况下是§15.26.2 Compound Assignment Operators.节选:
A compound assignment expression of the form
E1 op= E2
is equivalent toE1 = (T)((E1) op (E2))
, whereT
is the type ofE1
, except thatE1
is evaluated only once.
从§15.26.2个例子中引用的一个例子
[.]以下代码正确:
short x = 3; x += 4.6;
结果x的值为7,因为它等于:
short x = 3; x = (short)(x + 4.6);
换句话说,你的假设是正确的.