【问题标题】:What's the output? [closed]输出是什么? [关闭]
【发布时间】: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

标签: java pass-by-reference


【解决方案1】:

c1
modified
c3.st: modified c3

我赢了什么?

【讨论】:

  • 有点自尊。我发现引用交换有点令人不安。
  • @LuisSep 我不明白你为什么觉得这很奇怪......你会期望container.setSt("new container"); 替换作为参数传递的另一个container(不同的对象)吗?或者你会期望container = new Container(); 什么都不做?
猜你喜欢
  • 2013-06-20
  • 2018-09-19
  • 2017-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多