这是等于方法

时间:2013-12-31 23:26:38

标签: java this equals

我正在查看equals方法,我看到this并且我不明白它意味着什么...当我在构造函数和一些方法中看到它时我理解它们但我不清楚它当他们处于等于这样的方法时:

(obj == this) ......这意味着什么?它来自哪里?

我知道什么时候会说像this.name = name;

来自这样的方法

@Override
public boolean equals(Object obj) {
    if (obj == this) {
        return true;
    }
    if (obj == null || obj.getClass() != this.getClass()) {
        return false;
    }
抱歉,这可能是重复但我找不到任何东西......

4 个答案:

答案 0 :(得分:4)

this是当前的Object实例。只要有非静态方法,就只能在对象的实例上调用它。

答案 1 :(得分:3)

你必须看看如何调用它:

someObject.equals(someOtherObj);

这将调用equals实例上的someObject方法。现在,在那个方法里面:

public boolean equals(Object obj) {
  if (obj == this) { //is someObject equal to obj, which in this case is someOtherObj?
    return true;//If so, these are the same objects, and return true
  }

您可以看到this指的是调用equals的对象的实例。请注意equals()是非静态的,因此必须仅在已实例化的对象上调用。

请注意,==仅检查是否存在引用相等;也就是说,thisobj的引用指向内存中的相同位置。这些参考文献自然是相同的:

Object a = new Object();
Object b = a; //sets the reference to b to point to the same place as a
Object c = a; //same with c
b.equals(c);//true, because everything is pointing to the same place

进一步注意,equals()通常用于确定相等。因此,即使对象引用指向不同的位置,它也会检查内部以确定这些对象是否相同:

FancyNumber a = new FancyNumber(2);//Internally, I set a field to 2
FancyNumber b = new FancyNumber(2);//Internally, I set a field to 2
a.equals(b);//true, because we define two FancyNumber objects to be equal if their internal field is set to the same thing.

答案 2 :(得分:3)

您正在比较两个对象是否相等。摘录:

if (obj == this) {
    return true;
}

是一个可以阅读的快速测试

  

“如果我正在比较的对象是我,那就回归真实”

。您通常会在equals方法中看到这种情况,因此他们可以提前退出并避免进行其他代价高昂的比较。

答案 3 :(得分:3)

this指的是equals-method所属的类(对象)的当前实例。当您针对某个对象测试this时,测试方法(在您的情况下为equals(Object obj))将检查对象是否等于当前实例(称为this

一个例子:

Object obj = this;
this.equals(obj); //true 

Object obj = this;
new Object().equals(obj); //false