問題

直到今天,我才想到這個例子:

 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 複合轉讓運算子.提取物:

表單 E1 op= E2 的複合分配表示式相當於 E1 = (T)((E1) op (E2)),其中 TE1 的型別,除了 E1 只評估一次。

15.26.2 引用的一個例子

[...]以下程式碼正確:

 short x = 3;
x += 4.6;
 

並導致x具有值7,因為它相當於:

 short x = 3;
x = (short)(x + 4.6);
 

換句話說,你的假設是正確的。