對於 a = a + b
,如果 a
和 b
是 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