美文网首页
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 值传递 VS 引用传递

    Java是值传递还是引用传递一直都有争论,我们最终下个结论,Java是值传递而不是引用传递。如果Java是引用传递...

  • 自整理3 值传递和引用传递

    java的值传递和引用传递 首先,由于java没有指针机制,所有java归根究底只有值传递,没有引用传递。java...

  • Java的引用

    参考链接: Java到底是值传递还是引用传递 Java的四种引用方式 Java中的强引用、软引用、弱引用和虚引用 ...

  • 聊聊Java内部类

    一.磨叽磨叽Java值传递与引用传递 “在Java里面参数传递都是按值传递”即:按值传递是传递的值的拷贝,按引用传...

  • 【JAVA基础】函数知识

    1.函数参数传递方式 虽然java通过引用操作对象,所有的对象变量都是引用,然而,java不能通过引用传递方法参数...

  • Java面试题疑难点

    1. java值传递和引用传递 String为什么是值传递而不是引用传递 答:String是final的

  • Java Lambda表达式引用局部变量的原理

    规则1 Java中变量分为:基本类型变量和引用类型变量 规则2 Java方法传参只有值传递,没有引用传递,传递的值...

  • 快速区别值传递和引用传递

    复习Java知识的时候又看到值传递和引用传递的区别,然后就查询一下,结果都是Java到底是值传递还是引用传递之争,...

  • 【Java】引用传递

    简而言之,基础类型不会被函数改变;ArrayList等 是传引用进函数,会发生变化(如al),但是函数体不会覆盖A...

  • Java引用传递

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

网友评论

      本文标题:Java引用传递

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