对对象的引用的 Java 调用方法会影响调用方 [duplicate]

Java Calling methods on a reference to an object does affect the caller [duplicate]

提问人:Ahmed elmenshawie 提问时间:1/19/2017 最后编辑:vefthymAhmed elmenshawie 更新时间:1/19/2017 访问量:238

问:

在“Oracle Certifi ed Associate Java SE 8 Programmer I Study Guide”中谈到了按值传递,说:对对象的引用调用方法确实会影响调用者

 public static void main(String[] args) {
    StringBuilder name = new StringBuilder();
    speak(name);
    System.out.println(name); // Webby
    }
    public static void speak(StringBuilder s) {
    s.append("Webby");
    }

在本例中,输出是 Webby,因为该方法仅调用 参数。它不会将名称重新分配给其他对象。

enter image description here

那么这意味着什么呢?我不明白。不应该有 2 个不同的对象吗?

java 参数 传递 by-value

评论


答:

0赞 Steve Smith 1/19/2017 #1

Java 将对象参数作为引用的副本传递给原始对象。这意味着传递给 as 的 StringBuilder 与 main 函数中的 StringBuilder 实例完全相同,并且对它调用方法将在两个方法中影响它。但是,如果您要指向 StringBuilder 的另一个实例,它不会影响 main() 函数中的 StringBuilder。speak()ssspeak()name