直接問題:編譯
首先 byte的範圍 [-128,127]test
byte 類型能夠自動轉爲int類型 int類型不能自動轉爲byte類型。錯誤
超過byte的範圍,就會變成int類型了底層
byte b=1:正確,void
b=b+1:報錯,系統
b+=1:正確。
根本考察就是 byte相計算的時候若是不進行強制轉換,都會編譯錯誤的。
byte b=1,檢查右邊沒有超過byte的範圍(-128到127)。系統強轉爲1爲byte型;
b=b+1,1默認爲int類型,b自動轉型爲int與1作加法,結果是int類型的。把int類型賦給byte類型b.就報錯了。順便說一下,若是b=b+1改成b+=1就沒錯了。
b += 1,其實等價於 b = (byte)(b+1);底層會對這個結果進行強轉的,因此它編譯的時候沒事,若是b是127, 那麼加1後變成128了,成了int類型了,超過了byte類型的最大範圍了,系統會強轉,把int類型的 前面三個高位丟棄,丟棄後,若是剩下的一位中,最高位爲1,則取反加一,就成了負數了,若是最高位爲0,直接把值賦給b 。
演化問題:
public void add(Byte b){ b = b++;}@Testpublic void test(){ Byte a = 127; Byte b = 127; add(++a); System.out.print(a + " "); add(b); System.out.print(b + "");}輸出:a:-128b:127有疑問