JDK中是否有一个方法比较两个对象是否相等,是否为空?像这样:
public static boolean equals(Object o1, Object o2)
{
if (o1 == null)
{
return o2 == null; // Two nulls are considered equal
}
else if (o2 == null)
{
return false;
}
return o1.equals(o2);
}
自己编写这个方法似乎很愚蠢,因为我认为它必须已经存在于某个地方。
答案 0 :(得分:67)
Java 7.0增加了一个新的方便的类:Objects
。
它有一个完全适用于此的方法:Objects.equals(Object a, Object b)
答案 1 :(得分:17)
Apache Commons Lang有这样一种方法:ObjectUtils.equals(object1, object2)。你不希望在这种方法上使用泛型,它会导致伪造的编译错误,至少在一般情况下是这样。 Equals非常清楚(或者应该 - 它是合同的一部分)来检查对象的类并返回false,因此它不需要任何额外的类型安全。
答案 2 :(得分:15)
FWIW,这是我的实施:
private static boolean equals(Object a, Object b) {
return a == b || (a != null && a.equals(b));
}
在我的应用程序中,我知道a和b将始终是相同的类型,但我怀疑即使它们不是这样也能正常工作,前提是a.equals()是合理实现的。
答案 3 :(得分:5)
public static boolean equals(Object object1, Object object2) {
if (object1 == null || object2 == null) {
return object1 == object2;
}
return object1.equals(object2);
}
答案 4 :(得分:4)
如果您担心NullPointerExceptions,您可以测试等式:
if (obj1 != null && obj1.equals(obj2)) { ... }
equals()
的一般契约是非空对象永远不应该等于空引用,如果要将对象与空引用进行比较,equals()
方法应该返回false (而不是扔NPE)。
答案 5 :(得分:2)
每当我遇到需求并认为“这是Java必须拥有它的常见问题”但发现它没有时,我会检查Jakarta Commons项目。它几乎总是有它。快速搜索commons-lang API(具有最基本的常用实用程序)会显示equals()
方法,提供您想要的内容。
答案 6 :(得分:1)