例子一:
① byte a=1; //通過
當字面整數(shù)常量保存到byte凰狞、short、long 或char類型的變量中時双抽,Jdk會執(zhí)行自動類型轉換,概括說就是整型值賦值的時候可以自動轉換
② byte b=a+1; //編譯報錯
1默認是 int 類型,而 a 和 b是 byte類型,在運算的時候 a會自動轉換為 int 類型與1相加,而結果會變成 int 類型,這個時候大類型就不能自動轉化成小類型,必須顯式強制轉換? byte b = (byte) (a+1)
例子二:
int x = 266; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?int x = 206;? ?
b =(byte)x ; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?b =(byte)x ;
System.out.print(b) //輸出 10? ? ? ? ? ? ? ? ? ? ? ? ? ? System.out.print(b) //輸出 -50
原因:
int 是32位 4個字節(jié) 8位1字節(jié)
int轉換成byte 前面的3個字節(jié) 即24位 直接砍掉 就剩最后一位
所以 266 ——(00000000)(00000000)(00000001)(00001010)= 0001010 = 10
? ? ? ? 206 ——(00000000)(00000000)(00000001)(11001110)= 11001110= -50
最高位是 0 表示是正數(shù),如果是1表示負數(shù)简肴,要先按位取反再加1