可看注释
在a行代码时,test引用和堆内存如下:test指向123
test -> {123}
在b行代码是,引用和堆内存如下:test和a都指向123
test -> {123}
在c行代码处,a引用地址改变,但是test引用地址没变,如下:
test -> {123}
a -> {abc}
所以最终test输出 123
public class Main {
void replace(StringHolder a) {
a = new StringHolder("abc"); // c
}
static class StringHolder {
public StringHolder(String value) {
this.value = value;
}
public String value;
}
public static void main(String[] args) {
Main m = new Main();
StringHolder test = new StringHolder("123"); // a
m.replace(test); // b
System.out.println(test.value);
}
}