我只是不明白,如果将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”。

09-15 21:16