gpt4 book ai didi

java - 关于使用 this 实现 equals 来比较 Java 中的对象

转载 作者:行者123 更新时间:2023-12-02 03:48:23 26 4
gpt4 key购买 nike

我从这个论坛的另一个问题线程中看到了一段关于定义equals的代码段。但我的问题是以下代码的作用是什么,为什么需要它?谢谢。

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

原代码如下http://stackoverflow.com/questions/8338326/what-does-equalsobject-obj-do#

public boolean equals(Object obj)
{
if (obj == this)
{
return true;
}
if (obj == null)
{
return false;
}
if (obj instanceof Contact)
{
Contact other = (Contact)obj;
return other.getFirstName().equals(getFirstName()) &&
other.getLastName().equals(getLastName()) &&
other.getHomePhone().equals(getHomePhone()) &&
other.getCellPhone().equals(getCellPhone());

}
else
{
return false;
}

}

最佳答案

实现Java类的equals方法是一个经常讨论的话题。一般来说,您需要确保该方法返回 true,如果:

  • 您与 this 进行比较的对象是关于指针的同一对象(object == this)或
  • 您与进行比较的对象与您的域相同

因此,关于你的问题,你要求的是前一种情况,其中Java只是检查传递的objectthis是否指向内存中的相同地址(也许此链接可以帮助您http://www.javaworld.com/article/2072762/java-app-dev/object-equality.html)。

简短说明:当您实现 equals 方法时,您通常会遵循以下模式:

  1. 检查是否有相同的对象(关于指针),即

    if (object == this) return true;
  2. 您确保没有任何 null 实例(以避免进一步的 NullPointerException,如果它是 null 它可以永远不会相等,即

    else if (object == null) return false;
  3. 您检查该对象是否与您域中的 equal 含义相等(例如,如果 id 相等,则可以假定 dao 相等);在进行特定于域的验证之前,您通常始终确保拥有正确实例的对象,即,

    else if (this.getClass().equals(obj.getClass()) { ... }

    else if (this.getClass().isInstance(obj.getClass()) { ... }
  4. 在所有其他情况下,您希望返回 false,即,

    else return false;

注意:实现 equals 方法时,使用 Objects.equals(...) 方法来比较实例的不同属性通常很有用。

示例:

@Override
public boolean equals(final Object obj) {
if (obj == this) {
// we have the same object regarding the pointers (e.g., this.equals(this)), or have a look at 'Manjunath M' post for a different example
return true;
} else if (obj == null) {
// we compare with null (e.g., this.equals(null))
return false;
} else if (Contact.class.isInstance(obj.getClass())) {
/*
* If you want to be more strict you could also use:
* getClass().equals(obj.getClass())
*/
Contact other = Contact.class.cast(obj);
return Objects.equals(other.getFirstName(), getFirstName()) &&
Objects.equals(other.getLastName(), getLastName()) &&
Objects.equals(other.getHomePhone(), getHomePhone()) &&
Objects.equals(other.getCellPhone(), getCellPhone());
} else {
return false;
}
}

关于java - 关于使用 this 实现 equals 来比较 Java 中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36123143/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com