Java引用传递

以一个问题开始:如果在函数的入参中传递一个对象,然后在函数内部将这个对象置空,请问原始的对象是否为空?下面我们来验证这个问题:

public static void main(String[] args) {
        Entry entry = new Entry("name");
        updateEntry(entry);
        System.out.println("updateEntry " + entry.getName());

        Entry entry2 = new Entry("name");
        repalceEntry(entry2);
        System.out.println("repalceEntry " + entry2.getName());

        Entry entry3 = new Entry("name");
        emptyEntry(entry3);
        if (entry3 != null) {
            System.out.println("emptyEntry " + entry3.getName());
        }
        else {
            System.out.println("emptyEntry");
        }
    }

    private static void updateEntry(Entry entry)
    {
        entry.setName("aaa");
        System.out.println(entry.getName());
    }

    private static void repalceEntry(Entry entry)
    {
        entry = new Entry("aaa");
        System.out.println(entry.getName());
    }

    private static void emptyEntry(Entry entry)
    {
        entry = null;
    }

运行结果如下:

aaa
updateEntry aaa
aaa
repalceEntry name
emptyEntry name

结果表明:
引用传递可以修改参数对象的内部状态,但是对参数对象重新赋值是没有意义的;
Java入参,对象传递的是引用的副本,副本的概念其实就是按值传递,所以对象的属性值可以改变,但是引用无法改变,注意与C++区别;

答案:原始对象不为空;

网上有两种争论,入参对象按引用传递,那么是指传递对象的引用;入参对象按值传递,则指传递引用的值,不是对象的值;从上面的例子中,观察其在不同场景下的输出,理解其实质,知道啥时变,啥时不变。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 这是16年5月份编辑的一份比较杂乱适合自己观看的学习记录文档,今天18年5月份再次想写文章,发现简书还为我保存起的...
    Jenaral阅读 2,860评论 2 9
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,270评论 0 4
  • 〈奇异恩典〉是教会内外皆喜爱颂唱的诗歌。这首诗歌的作者约翰.牛顿(John.Newton)生于英国伦敦,母亲是虔诚...
    Baron_0065阅读 744评论 0 0
  • 如果有一天,我们不再联系, 不是你不好, 而是时间渐渐斩断我们的交集。 但请你记住过去美好的回忆 都被我珍藏在心底...
    Aunique阅读 277评论 0 0
  • 逐步深入,忽然觉得自己的英语,运用到真正交际中是多么的不足。如何写文书,如何写个人陈述,如何写推荐信,如何发邮件,...
    草木吟阅读 282评论 0 0