【发布时间】:2012-05-31 18:45:08
【问题描述】:
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();
}
}
【问题讨论】:
-
为什么要投反对票??不明白..
-
我很想对代码缩进的“狗的早餐”投反对票,但让它滑倒吧。我怀疑它被认为有很多重复的人投了反对票。现在添加了pass-by-reference 和pass-by-value 标签,检查右侧栏中显示的“相关”线程以获得更好的点击率。
-
因为它已经被询问了一百万次,搜索引擎很快就会显示出来。现在又会有无休止的辩论,因为大多数人都错误地认为这是通过引用来调用的。如果它是通过引用调用的,那么您的第一个示例将抛出 NullPointerException。
-
向量只是一个数字的容器。所以在你的第一个例子中,函数 functioncall() 只是将变量 vc 设置为 null,但容器本身仍然存在于 main 中。在第二个函数中,您告诉容器自己清空。它仍然是同一个容器,并且没有制作竞争副本。 Java 总是按值传递,从不按引用传递。
标签: java pass-by-reference pass-by-value