【发布时间】:2013-02-03 05:48:51
【问题描述】:
引用传递让我有点头疼,所以我想看看社区的其他人会发现这个问题有多困惑。如果您认为这是一个愚蠢的问题,请随时提出。
你会说以下程序的输出是什么?
class Demo {
public static void main(String[] args) {
ArrayList<Container> list = new ArrayList<Container>();
Container c1 = new Container();
Container c2 = new Container();
c1.setSt("c1");
c2.setSt("c2");
list.add(c1);
list.add(c2);
Container c3 = new Container();
c3.setSt("c3");
modify(list, c3);
for (Container st : list) {
System.out.println(st.getSt());
}
System.out.println("c3.st: " + c3.getSt());
}
private static void modify(ArrayList<Container> list, Container container) {
list.get(1).setSt("modified");
container.setSt("modified c3");
container = new Container();
container.setSt("new container");
}
}
class Container {
private String st;
public String getSt() {
return st;
}
public void setSt(String st) {
this.st = st;
}
}
【问题讨论】:
-
提出你的答案,并问为什么它与你的理解不同。当前问题是题外话。
-
StackOverflow 是否应该取代您可信赖的 Java 编译器和 JVM?投票结束。
-
不幸的是,这对 SO 来说不是一个好问题。听起来您对参考文献有真正的疑问;你的工作是正确地提出这个问题,而不是问这样的迂回问题。
-
@LuisSep:虽然这个问题不适合 SO,但您可以查看这篇精彩的帖子,它非常清楚地解释了 Java 如何通过值传递所有内容:stackoverflow.com/questions/40480/is-java-pass-by-reference