美文网首页
Java引用传递

Java引用传递

作者: dlstone | 来源:发表于2018-06-29 23:12 被阅读0次

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

    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++区别;

    答案:原始对象不为空;

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

    相关文章

      网友评论

          本文标题:Java引用传递

          本文链接:https://www.haomeiwen.com/subject/jsoayftx.html