两次都是bob
Topic source我也是这样理解的,实例化person之后,第一次调用setAge,把15传递过去。然后打印。接着只是修改了n的值,并没有再次调用setAge修改person内部的age值。当然两次都是15。这和参数绑定有什么关系???我搞不大明白。
因为String是不可变的(看原码会发现String类是被final修饰的),所以给bob赋新值时实际上是给了bob变量新的指向(相当于每次赋值都是new String()),而实例里的 name 变量还是之前的指向,所以当person.getName() 时return的是之前的值。
将 perso的string类型改成StringBuilder。
public class Main {
public static void main(String[] args) {
Person p = new Person();
StringBuilder bob = new StringBuilder("Bob");
p.setName(bob); // 传入bob变量
System.out.println(p.getName()); // "Bob"
bob.append("改变"); //
System.out.println(p.getName()); // "bob改变"
}
}
class Person {
private StringBuilder name;
public StringBuilder getName() {
return this.name;
}
public void setName(StringBuilder name) {
this.name = name;
}
}
- 1
honnnnnnnnnng
第一次实参传入了方法的形参里,
第二次实参未传入方法的形参里。