Integer参数传递问题

今天看到一个Java知识点:JAVA里除了8种基本类型传参数是值传递,其他的类对象传参数都是引用传递。

这句话的意思:Integer作为参数传递时引用传递。

但是我测试了一下,发现Integer作为参数传递,没有设置返回值。Ineger的结果不变

public class test{
    public void add(Integer i){
        i=i+3;
    }
    @Test
    public void test(){
        Integer a=5;     
        add(a);
        System.out.println(a);
    }
}

测试上面的结果:5

首先为了验证上面的知识点是不是对的,我又测试了下面代码:

public class test{


//System.identityHashCode(对象)输出对象的地址
    public void add3(Integer i){
        System.out.println("i的地址:"+System.identityHashCode(i));
        i=3;

    }
    @Test
    public void test(){

        Integer a=5;
        System.out.println("a的地址:"+System.identityHashCode(a));
        add(a);
        System.out.println(a);

    }
}

结果:

a的地址:352359770
i的地址:352359770
5

通过上面的代码测试,发现Integer参数确实是引用传递。通过查询知道:

由于jdk1.5自动装箱的特性,实际情况是等价于执行  i = Integer.valueOf(3);valueOf()方法 参看源码 会根据传入的数值 如果在-128-127之间 就从常量池中获取一个Integer对象返回;如果不在范围内 会new Integer(3)返回。

即是说Integer的地址会随着值的改变而改变!

我又进行了下面的测试:

public class test{
    public void add3(Integer i){
        System.out.println("i赋值前的地址:"+System.identityHashCode(i));
        i=3;
        System.out.println("i赋值后的地址:"+System.identityHashCode(i));

    }
    @Test
    public void test(){
        Integer a=5;
        System.out.println("a赋值前的地址:"+System.identityHashCode(a));
        add3(a);
        System.out.println("a赋值前的地址:"+System.identityHashCode(a));
        a=10;
        System.out.println("a修改值后的地址:"+System.identityHashCode(a));
        System.out.println(a);

    }
}

结果

a赋值前的地址:352359770
i赋值前的地址:352359770
i赋值后的地址:243745864
a赋值前的地址:352359770
a修改值后的地址:699780352
10

通过测试,返现Integer每次改变值,都回发生地址的变化。

还需要注意的一点是:

在Integer源码中,int值是final修饰的,不可以改变

class Integer{
final int value; //一旦赋值,就不能改变。
}

总结:

(1)Integer参数传递是引用传递(或叫地址传递)

(2)Integer作为参数传入方法,没有设置返回值,Inerger的值就不会改变原因是:Integer每次赋值都是被赋予新的对象,所以作为引用传入后,又会换成其他的引用。

参考文章:

https://www.cnblogs.com/zhousysu/p/5483795.html

https://www.cnblogs.com/toSeeMyDream/p/9165846.html

https://blog.csdn.net/u012309392/article/details/83443679

https://blog.csdn.net/weixin_34249678/article/details/85995877

  • 18
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 13
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值