我看到,下面的代碼:二進制加法執行類型邊界檢查而速記和增量不
byte b = 127;
b = b + 1;
b = b + 1;
System.out.println(b);
導致邊界運行時間期間檢查,並且所述第一加法取B OUT的範圍,導致以下錯誤 -
Main.java:11: error: incompatible types: possible lossy conversion from int to byte b=b+1; Main.java:12: error: incompatible types: possible lossy conversion from int to byte b=b+1;
然而,當我使用簡寫或增量,如:
我們發現字節的值'包繞',給出輸出
-127
爲什麼這個異常?究竟是什麼阻止了加法(如C所做的那樣),還是通過邊界檢查來增加/縮短?
非常感謝,當做 'short x = 10; x = x * 5;' 我得到類似的錯誤 - **可能有損耗從短到int **轉換。 10 * 5 = 50,落在短的範圍內。爲什麼會引發編譯時錯誤?是否因爲編譯器自動將整個rValue轉換爲int? – Sriram
@Sriram編譯器不知道你知道什麼。使'short'或'byte'成爲'final'變量,編譯器可以計算出不需要的警告。 –