【问题标题】:Don't understand references看不懂参考
【发布时间】:2015-05-23 23:29:41
【问题描述】:

我只是不明白如果将 t 分配给 u,为什么 t.getName() 是 Keen。

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);
    }
}

【问题讨论】:

    标签: java pointers reference


    【解决方案1】:

    我也有点新,但我认为这就是为什么它会打印“Keen”。 这将涉足 java 对象的使用

    首先,Person t=new Person("Gene") 创建一个名为“Gene”的人员对象。然后,它使用引用(在您的情况下为 t)来引用该对象。所以t 将始终引用该 Person 对象。

    然后,在您的下一行 Person u=t 中,您将创建一个新引用,该引用实际上引用了与原始 t 引用相同的带有“Gene”的 Person 对象。使用= 符号使它们做同样的事情,参考“基因”,就像Java 中数学运算的相等使左手等于右手一样。

    因此,无论您使用u 还是t 来指代“基因”对象,您指的是同一件事。因此,无论在u.setName("Keen") 或t.setName("Keen") 中,您都在访问内存中的某个对象并对其执行某些操作,在这种情况下将name 变量更改为“Keen”。

    【讨论】:

      【解决方案2】:

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

      Person t = new Person("Gene");
      

      使用“new”关键字 - 它告诉您创建了新对象。 行:

      Person u = t;
      

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

          我将与你分享我曾经读过的参考文献的隐喻。

          假设您的 Person 对象是气球。您的参考 t 是附加到气球的字符串(绳索,而不是 java 字符串)。

          因此,当您创建另一个与 t 相同的引用 u 时,您创建了另一个字符串(绳索)连接到同一个气球(人)。

          如果您更改气球的属性,例如颜色,u 和 t 都会看到这种变化,因为你只有一个气球连接到 u 和 t。

          因此,当您将引用分配给另一个引用时,您并没有创建新对象。

          【讨论】:

            猜你喜欢
            • 2013-08-04
            • 2014-04-10
            • 1970-01-01
            • 1970-01-01
            • 2017-09-21
            • 2015-08-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多