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");