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,因为该方法只调用了一个方法 参数。它不会将名称重新分配给其他对象。
那是什么意思?我没有得到它。不应该有2个不同的对象吗?
答案 0 :(得分:0)
Java将对象参数作为对原始对象的引用的副本传递。这意味着作为speak()
传递给s
的StringBuilder与主函数中的StringBuilder实例完全相同,并且调用它的方法将在两种方法中影响它。但是,如果您将s
内的speak()
指向另一个StringBuilder实例,则不会影响main()函数中的StringBuilder name
。