感到困惑的是,Java在传递对象引用时是使用按值调用还是按引用调用?

2022-09-01 20:48:05
public class program1{

    public static void main(String args[]){

        java.util.Vector vc=new java.util.Vector();

        vc.add("111");
        vc.add("222");

        functioncall(vc);

        vc.add("333");

        System.out.println(vc);

    }

    public static void functioncall(java.util.Vector vc){     

        vc=null;    

    }
}

上述程序的输出为 [111,222,333]。但是,当我运行以下程序时,输出是[333]。当我们传递引用时感到困惑,它是如何工作的,无论是按值调用还是按引用调用?以及为什么

public class program1{

    public static void main(String args[]){

        java.util.Vector vc=new java.util.Vector();

        vc.add("111");
        vc.add("222");

        functioncall(vc);

        vc.add("333");

        System.out.println(vc);

    }

    public static void functioncall(java.util.Vector vc){

        vc.removeAllElements();  

    }
}

答案 1

它传递引用的

为了无耻地窃取我不久前在这里看到的一个类比,想象一下,你使用的每个标识符都是一张纸,上面写着一个地址。地址指向一所房子。

您可以更改房屋(例如,通过将对象添加到矢量或清除它),但您仍然拿着同一张纸,地址仍然将您带到同一个房屋。

如果将向量设置为 null,则只需擦除地址即可。

本文将更详细地解释它。


答案 2

您将 vc 作为参考副本传递(始终)。然后执行 或 ,您只需修改来自 vc local 属性的引用,因此主属性没有更改是正常的。vc = null;vc = new Vector()