困惑,java是否在传递对象引用时使用按值调用或按引用调用?

use*_*597 17 java pass-by-reference pass-by-value

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;    

    }
}
Run Code Online (Sandbox Code Playgroud)

上述程序的输出为[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();  

    }
}
Run Code Online (Sandbox Code Playgroud)

Tha*_*wen 22

它传递了引用的.

为了无耻地窃取我刚才看到的类比,想象你使用的每个标识符都是一张纸,上面写着地址.地址指向一所房子.

您可以更改房屋(例如,通过向向量添加对象或清除它),但您仍然持有相同的纸张,地址仍然会将您带到同一个房子.

如果将向量设置为null,那么您所做的就是擦除地址.

本文将更详细地解释它.