java封装类型传参问题

今天遇到了一个问题,本来以为很好能解决,结果却使我对结果有了不一样的认识

背景:就是我有一个int类型的值,我需要调用一个方法,把这个参数传进去,希望在方法里面改变这个的值,我知道基本类型不会改变,所以我就用了Integer,发现还是不行,我接着就用了AtomicInteger这个类型,发现还是不行,我就觉得很懵逼,后来发现,凡是继承于Number里面的,调用一个方法,给这个值重新覆值,就会有问题

    public void test(){
        int a = 1;
        String str = "1";
        Integer integer = new Integer(1);
        AtomicInteger atomicInteger = new AtomicInteger(1);
        changeInt(a);
        changeString(str);
        changeInteger(integer);
        changeAtomicInteger(atomicInteger);
        System.out.println(a);
        System.out.println(str);
        System.out.println(integer);
        System.out.println(atomicInteger);
    }

    private void changeInt(int a){
        a = a +1;
    }

    private void changeString(String str){
        str = str + "___";
    }

    private void changeInteger(Integer integer){
        integer = integer + 1;
    }

    private void changeAtomicInteger(AtomicInteger atomicInteger){
        atomicInteger = new AtomicInteger(2);
    }

返回值为

1
1
1
1

不过这个也是有解决办法的,第一种解决办法很笨拙,就是我把之前传递的int改为int[]数组的表达形式,第二种方式,就是我们对于AtomicInteger这种类型的对象,我不要采用重新覆盖值的方式,而是要采用set的方式,对于这样而言,就相当于是我不改变你的地址的值,我只是改变这个地址引用对象的值

    @Test
    public void test1(){
        AtomicDouble atomicDouble = new AtomicDouble(1);
        changeAtomicDouble(atomicDouble);
        System.out.println(atomicDouble);
    }
        private void changeAtomicDouble(AtomicDouble atomicDouble){
        atomicDouble.set(3);
    }

返回值

3

结论:通过这件事情,我发现其实有些时候,我们认为理所应当的事情,并没有我们想的那么容易,有些时候,我们认为正确的事情,恰恰在有些时候就是错误的,对于学习来说呀,还是一个要谦虚的过程,是一个持续学习的过程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值