Avatar ·

Java中参数是按引用传递还是按值传递?

大家好!我刚开始学习Java,遇到了一个困惑。书上说Java中一切都是按值传递的,但在实践中我看到了一些奇怪的现象。 举个例子。当我将一个对象(比如列表)传递给方法并在方法内部修改它时,修改在方法退出后仍然保留: ```java public class Test { public static void main(String[] args) { StringBuilder sb = new StringBuilder("Hello"); changeString(sb); System.out.println(sb); // 输出: Hello World } public static void changeString(StringBuilder s) { s.append(" World"); } } ``` 这里sb被修改了。我以为如果传递的是副本,修改应该是局部的。难道对象是按引用传递的吗? 但如果我在方法内部尝试赋值一个新对象,外部不会受到影响: ```java public class Test { public static void main(String[] args) { StringBuilder sb = new StringBuilder("Hello");