第一個正確,第二個報錯,第三個正確。根本原因就是 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 。