我只是不明白,如果将t分配给u,为什么t.getName()是敏锐的。
public class StringProgram{
public static void main(String[] args) {
Person t = new Person("Gene");
Person u = t;
u.setName("Keen");
System.out.println(t.getName());//Keen
System.out.println(t.equals(u));//true
}
}
人类
public class Person{
private String name;
public Person(String d){
name=d;
}
public void setName(String a){
name=a;
}
public String getName(){
return name;
}
@Override
public boolean equals(Object o) {
if (!(o instanceof Person)) {
return false;
}
return ((Person) o).name.equals(this.name);
}
}
最佳答案
我也有点新,但是我认为这就是为什么它将打印“ Keen”的原因。
这将涉足Java对象的使用
首先,Person t=new Person("Gene")
创建一个具有名称变量“ Gene”的人员对象。然后,它使用一个引用(在您的情况下为t
)来引用该对象。因此,t
将始终引用该Person对象。
然后,在下一行Person u=t
中,您将创建一个新引用,该引用实际上引用的是具有“ Gene”作为原始Person
引用的同一t
对象。使用=
符号可以使它们执行相同的操作,请参阅“ Gene”,就像Java中与数学运算的相等使左手等于右手一样。
因此,无论您是使用u
还是t
引用“ Gene”对象,都是在指相同的事物。因此,在u.setName("Keen")
或t.setName("Keen")
中,您正在到达内存中某个位置的同一对象并对其执行某些操作,在这种情况下,将name
变量更改为“ Keen”。