直接問題:
首先 byte的范圍 [-128,127]
byte 類型可以自動轉為int類型 int類型不能自動轉為byte類型。
超過byte的范圍,就會變成int類型了
byte b=1:正確,
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++;
}
@Test
public void test()
{
Byte a = 127;
Byte b = 127;
add(++a);
System.out.print(a + " ");
add(b);
System.out.print(b + "");
}
輸出:
a:-128
b:127
有疑問