【问题标题】:Why doesn't pass-by-refernce work? [duplicate]为什么引用传递不起作用? [复制]
【发布时间】:2013-03-13 00:17:18
【问题描述】:

我知道在 java 中一切都是通过引用传递的。但为什么它在这种情况下不起作用?我原以为它应该打印出“Hate”而不是“Love”。

class Test {
    static class Str {
        public String str;

        public void set(String str) {
            this.str = str;
        }
    }

    public static void main(String[] args) {
        Str s = new Str();

        String str = "Love";

        s.set(str);
        str = "Hate";

        System.out.println(s.str);
    }
}

【问题讨论】:

  • 引用是按值传递的,这就是原因。
  • 查看This Question的讨论
  • 在 Java 中,一切都是按值传递。碰巧一个对象的“值”是对它在堆中位置的引用。
  • “我知道在java中一切都是通过引用传递的。”然后你就有了一个基本的mis-理解。

标签: java reference


【解决方案1】:

main 函数中,str 只是存储对字符串的引用。在执行str = "hate" 时,引用发生了变化,但原始对象"love" 已存储在s.str 中并保留在那里。

请参阅this 了解更多信息。

【讨论】:

    【解决方案2】:

    使用str = "Hate",您只需将本地str 引用更改为“仇恨”; s.str 仍然指的是“爱”,所以这就是打印的内容。

    【讨论】:

    • "s.str 仍然指的是"Love"这一事实似乎表明它是按值传递的,而不是按引用传递的。只有传值时,才不会影响函数内部的值。那么,在将参数传递给函数时,java 引用的行为是否与 C++ 中的指针相同?
    • Java 对象引用更像是 C++ 指针而不是 C++ 引用,因为如果您更改一个 Java 对象引用,则使用第一个引用初始化的另一个 Java 引用仍然引用旧值。
    • 所以,在 Java 中,如果我这样做:
    猜你喜欢
    • 1970-01-01
    • 2011-02-19
    • 1970-01-01
    • 1970-01-01
    • 2016-01-24
    • 2013-03-05
    • 2012-10-01
    • 2014-07-07
    • 1970-01-01
    相关资源
    最近更新 更多