220901每日一题(值传递和引用传递、自动装箱和拆箱、计算机的数运算)

看下面这道题:

public class Test2
{
    public void add(Byte b)
    {
        b = b++;
    }
    public void test()
    {
        Byte a = 127;
        Byte b = 127;
        add(++a);  //-128
        System.out.print(a + " ");
        add(b);  //127
        System.out.print(b + "");
    }
}

这题虽然涉及到很多(基本数据类型的装箱和拆箱、值传递和引用传递、……),但关键就是add方法到底起不起作用。

这题看似是传入Byte引用传递,但是在add方法中++,本质仍然是值传递,因此add方法没有起到自增的作用。

【小结】
除了上面的分析,这题还有其他需要注意的点:

  • 自动装箱和拆箱
    比如:Byte a =127; a = a++;最终a是多少? a=127
    Byte b = 127; b = ++b; 最终b是多少? b=-128

  • 传入包装类属于值传递

  • 127+1=-128
    (涉及计算机中的数运算、原码反码补码)

public class Main{
	public static void add1(Byte b){
		b = b++;
	}
	public static void add2(Byte b){
		++b;
	}
	public static void main(String[] args){
		Byte b1 = 127;
		Byte b2 = 127;
		Byte b3 = 127;
		Byte b4= 127;
		add1(b1);
		add2(b2);
		b3 = b3++;
		++b4;

		System.out.print1n(b1); //127
		System.out.println(b2); //127
		System.out.println(b3); //127
		System.out.print1n(b4); //-128
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值