『Java 語法基礎』a = a + b 與 a += b 的區別

BNTang發表於2024-03-18

對於 a = a + b,如果 ab 是 byte、short 或 char 型別的變數,在進行算術運算的時候會首先提升為 int 型別(這稱為 型別提升),然後才執行加法運算。

如果想將結果賦值回 byte、short 或 char 型別的變數,必須進行顯式的型別轉換,否則編譯器會報錯,因為 int 型別不能隱式轉換為 byte、short 或 char 型別。

例如:

byte a = 10;
byte b = 20;

// 必須顯式轉換
a = (byte)(a + b);

如果不進行強制型別轉換,上述程式碼會在編譯時報錯,因為 a + b 的結果是 int 型別。

而對於 a += b,它是一個複合賦值運算子,它會自動進行型別轉換。編譯器對於 a += b 運算會自動將賦值操作的結果型別轉換為目標變數 a 的型別。因此,使用 += 進行操作時,不需要顯示進行型別轉換,哪怕是在處理 byte、short 或 char 型別的變數。

例如:

byte a = 10;
byte b = 20;

// 不需要顯式轉換,編譯器自動處理
a += b;

在這個例子中,a += b 實際上是 a = (byte)(a + b) 的簡化形式,編譯器會隱式地將加法運算的結果轉換回 a 的型別(在這個情況下是 byte)。

因此,總結起來,a = a + b 需要顯式的型別轉換以避免型別提升帶來的問題,而 a += b 則由編譯器負責處理型別轉換。

完整程式碼可在此查閱:GitHub

相關文章