Java对对象引用的调用方法确实会影响调用者

时间:2017-01-19 12:44:39

标签: java parameters parameter-passing pass-by-value

in" 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个不同的对象吗?

1 个答案:

答案 0 :(得分:0)

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