阿神2017-04-18 10:12:02
是因為java的自動轉型導致的,原理如下:
1、128為int整數32位,前24為全部為0 後8位是1000 0000後首位
2、(byte)128 轉型為byte是1,java認為是負數的補碼標識
3、 在System.out.println呼叫時,java類型系統會自動將byte型別轉換為int,此時進行的是有符號左移操作,前24位元全部為1,後8為位1000 0000,仍為-128.4、所以輸出的為-128
怪我咯2017-04-18 10:12:02
128
是一个 int
类型整数 00000000 00000000 00000000 10000000
, 长度为 32
位
byte
类型整数长度为 8
位, 所以强制转换后为最后 8
位 10000000
由左往右第一位為符號位,0
时值为 0
~127
,1
时值为 -128
~-1
呼叫 System.out.println(int)
时 Java 把 byte -128
转回 int -128
所以 (byte) 128 == (int) -128