声明:如有不对,请联系笔者,及时改正,共同学习。


先上一段代码:


  1. public static void main(String[] args) { 
  2.         byte b = (byte)(129); 
  3.         System.out.println(b); 
  4.     } 

main方法里面有这么一段。

大家都知道Java里面byte取值范围在-128~127之间,上面这段代码很显然已经超出byte范围,但不会报错。也能输出结果,结果为-128。为什么会是这个结果呢?

涉及到补码运算。过程是先将b,就是127转换成Int型的,然后加1,最后截掉高八位,剩下10000000,Byte是有符号的,所以这个值所有为取反在加1就是它的绝对值,所以这个数就是-128。

欢迎讨论。