我是靠谱客的博主 羞涩萝莉,最近开发中收集的这篇文章主要介绍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

最后

以上就是羞涩萝莉为你收集整理的Integer参数传递问题的全部内容,希望文章能够帮你解决Integer参数传递问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(42)

评论列表共有 0 条评论

立即
投稿
返回
顶部