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 其实就已经越界了。但是在内存中时怎么处理呢?

十进制二进制
1270111 1111
127+1
-1281000 0000

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

如有出入恳请指教

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值