大家都知道,在Java中整數默認的數據類型是int類型,當我們使用byte的時候就要小心了,因為如果兩個byte類型的變量相加結果賦給一個byte類型的變量是會編譯錯誤的。請看下列代碼:
此處報了一個編譯錯誤:類型不匹配:不能從 int 轉換為 byte。
為什么會報這樣一個錯誤呢?明明我b1,b2都是byte類型的數據,b1,b2相加的值也沒有超過byte所能表示的最大范圍,這個錯誤的原因是什么呢。接下來,為你說明原因。
b1,b2是兩個byte的數據不錯,但是同時b1,b2也是兩個變量,兩個變量相加之后的值是多少(也就是說有可能超過byte所能表示的最大范圍),我們不得而知,當然java也就不得而知了,所以java就將b1,b2相加的結果自動的提升為int類型,也就是java整數的默認數據類型,所以此時會報一個這樣的編譯錯誤。
再看如下代碼:
此時的代碼就沒有了編譯錯誤。因為賦值語句的右邊是兩個常量,我們知道它們的和不會超過byte所能表示的最大范圍,當然java也知道,所以不會報編譯錯誤。 上面的話通過下圖可以驗證
- 因為byte所能表示的最大整數是127,127+3顯然超過了byte所能表示的最大范圍,此時編譯錯誤:類型不匹配:不能從 int 轉換為 byte。
結論:當一個整數的值到了int的表示范圍就自動轉換成int,即使原來是byte類型。
byte i = ‘B’;
輸出i,會輸出66.