在java中數值變量相加與數值常量相加存在區別:
變量相加時,可能存在手動強制轉換。
常量相加時,在目標數據範圍內時,在編譯器會直接將相加的值賦予a4生成class文件,若不在目標數據範圍之內,則會出現編譯錯誤(稱之爲常量優化機制)。
例如:
public static void main(String[] args) {
byte a1 = 4;
byte a2 = 3;
byte a3 = (byte) (a1 + a2);
byte a4 = 4 + 3;
}
從上述代碼中我們可以看到:
1.變量進行相加的byte類型最終對a3賦值時需要進行強制轉換爲byte類型,原因是byte類型相加時會自動提升爲int類型進行運算。
2.常量相加最終對a4賦值時,是直接賦值,原因是在編譯期時,編譯的過程中檢測到4+3的數值範圍在byte範圍之內,所以就直接可以將值賦予到byte類型的a4中。如果常量相加超過了byte範圍,那麼就需要手動強轉了。