我就是不明白为什么t.getName()会对t赋值给u感兴趣。
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
}
}Person类
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);
}
}发布于 2015-05-24 07:48:16
我也是个新手,但我想这就是为什么它会打印"Keen“的原因。这将深入探讨java对象的用法。
首先,Person t=new Person("Gene")创建了一个person对象,它的名字是变量"Gene“。然后,它使用引用(在本例中为t )来引用该对象。因此,t将始终引用Person对象。
然后,在您的下一行Person u=t中,您将创建一个新的引用,该引用实际引用与原始t引用相同的Person对象。使用=符号让它们做同样的事情,引用“基因”,就像Java语言中的数学运算一样,左手等于右手。
因此,无论你用u还是t来引用“基因”对象,你指的都是同一件事。因此,无论是在u.setName("Keen")中还是在t.setName("Keen")中,您都会到达内存中的某个位置,并对其执行某些操作,在本例中,将name变量更改为"Keen“。
发布于 2015-05-24 07:37:14
这与他们在上面的评论中提到的user4932934完全一样。请注意这一行:
Person t = new Person("Gene");使用" new“关键字-它告诉你新的对象被创建了。行:
Person u = t;简单地将"t“赋值给"u”。现在它们引用了内存中的同一对象,没有创建Person的新实例。
发布于 2015-05-24 07:37:35
Person u = t;使u引用与t完全相同的对象。相同的内存位置,如果有帮助的话。因此,更改t的内容也会更改u的内容。因为它们是同一个物体。
https://stackoverflow.com/questions/30418574
复制相似问题