byte类型的127+1 = 128吗

byte类型的127+1 = 128吗

请看一道面试题 public class Test2 {

public void add(Byte b) {

b = b++;

}

public void test() {

Byte a = 127;

Byte b = 127;

add(++a);

System.out.println("a = "+a);

add(b);

System.out.println("b = "+b);

}

public static void main(String[] args) {

Test2 test2=new Test2();

test2.test();

}

}

运行结果为: a = -128 b = 127 为何呢? 分析: 首先看b,Byte b = 127; add(b) ,Byte属于包装类的值传递,并不会引起真实值的改变,可以看Java的值传递机制

再看a的值变化,++a表示的是a的参数先加1了再参与传参。 但是即使函数内部a的值怎么变化,a再传参前就已经加1了。 但是a+1 = 128吗,其实不然! 原因如下: byte 的取值 -128 ~ 127 当 127 + 1 其实就已经越界了。但是在内存中时怎么处理呢?

十进制 二进制 127 0111 1111 127 +1 -128 1000 0000 因为在八位二进制的表示中:1000 0000的最高位符号位为1,是一个负数,故采用补码的形式,则对应的十进制就是-128。

如有出入恳请指教

❈ ❈ ❈

相关文章

✧ ✧ ✧
乌鲁木齐求婚场地推荐:10个浪漫创意地点,打造专属你的爱情仪式
硬件知识连接wifi能力强的手机(哪款手机连接wifi上网速度快)
開箱:真空吸附手機架,走到哪吸到哪超方便
www.bet3365.com

開箱:真空吸附手機架,走到哪吸到哪超方便

📅 08-05 👁️ 2093