繁体   English   中英

JAVA中的对象比较……第2部分

[英]Object Comparison in JAVA…Part 2

这篇文章是我以前在这里找到的文章的延续

对象比较是否相等:JAVA

根据收到的建议,我创建了以下类,并使用Eclipse IDE进行了equals(),hashcode()覆盖...所有操作。 但是,当我使用存储这些对象的arraylist的contains()方法比较引用同一类的两个不同对象时,仍然会遇到错误。 我不知道我的实现有什么问题。 想要帮助进行故障排除。

public class ClassA {

private String firstId;
private String secondId;
/**
 * @return the firstId
 */
public String getFirstId() {
    return firstId;
}
/**
 * @param firstId the firstId to set
 */
public void setFirstId(String firstId) {
    this.firstId = firstId;
}
/**
 * @return the secondId
 */
public String getSecondId() {
    return secondId;
}
/**
 * @param secondId the secondId to set
 */
public void setSecondId(String secondId) {
    this.secondId = secondId;
}
/* (non-Javadoc)
 * @see java.lang.Object#hashCode()
 */
public int hashCode() {
    final int PRIME = 31;
    int result = 1;
    result = PRIME * result + ((firstId == null) ? 0 : firstId.hashCode());
    result = PRIME * result + ((secondId == null) ? 0 : secondId.hashCode());
    return result;
}
/* (non-Javadoc)
 * @see java.lang.Object#equals(java.lang.Object)
 */
public boolean equals(Object obj) {
    if (this == obj)
        return true;
    if (obj == null)
        return false;
    if (getClass() != obj.getClass())
        return false;
    final ClassA other = (ClassA) obj;
    if (firstId == null) {
        if (other.firstId != null)
            return false;
    } else if (!firstId.equals(other.firstId))
        return false;
    if (secondId == null) {
        if (other.secondId != null)
            return false;
    } else if (!secondId.equals(other.secondId))
        return false;
    return true;
}

}

ClassA clsA1 = new ClassA();
ClassA clsA2 = new ClassA();

clsA1.setFirstId("value1");
clsA1.setSecondId("value2");

clsA2.setFirstId("value1");
clsA2.setSecondId("value2");

ArrayList a1 = new ArrayList();
ArrayList a2 = new ArrayList();

a1.add(clsA1);
a2.add(clsA2);

if(a1.contains(clsA2)
{
    System.out.println("Success");
}
else
{ 
    System.out.println("Failure");
}

我得到的结果是“失败”

我在Netbeans中测试了您的代码,获得了成功。 在if(a1.contains(clsA2)中有一个错字的“)”

“当然会失败。在您的测试代码中,您的id字符串为null,并且如果发生这种情况,则将equals方法编写为返回false。如果firstId和secondId均为null,或者如果两者都为null且两者都其他比赛。” 真的不对。

如果两个ID均为null,则等于将返回true。 仅当一个ID不是。

之所以出现“失败”,是因为您在未将clsA2添加到a1时正在检查a1包含clsA2 检查a2.contains(clsA2)是否应打印“成功”

我只是复制粘贴并测试了您的代码。 我成功了。 您仅在a1.contains(clsA2)之后错过了一个括号。 eclipse生成的equals()确实正确处理了null

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM