java經典問題 byte b=1、b=b+1、b+=1


直接問題:

首先 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
有疑問


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM