首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不理解参考文献

问不理解参考文献
EN

Stack Overflow用户
提问于 2015-05-24 07:29:41
回答 4查看 51关注 0票数 0

我就是不明白为什么t.getName()会对t赋值给u感兴趣。

代码语言:javascript
复制
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类

代码语言:javascript
复制
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);
    }
}
EN

回答 4

Stack Overflow用户

发布于 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“。

票数 2
EN

Stack Overflow用户

发布于 2015-05-24 07:37:14

这与他们在上面的评论中提到的user4932934完全一样。请注意这一行:

代码语言:javascript
复制
Person t = new Person("Gene");

使用" new“关键字-它告诉你新的对象被创建了。行:

代码语言:javascript
复制
Person u = t;

简单地将"t“赋值给"u”。现在它们引用了内存中的同一对象,没有创建Person的新实例。

票数 1
EN

Stack Overflow用户

发布于 2015-05-24 07:37:35

Person u = t;使u引用与t完全相同的对象。相同的内存位置,如果有帮助的话。因此,更改t的内容也会更改u的内容。因为它们是同一个物体。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30418574

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档