簡體   English   中英

比較兩個對象並檢查null

[英]Compare two objects with a check for null

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

自己編寫這個方法似乎很愚蠢,因為我認為它必須已經存在於某個地方。

Java 7.0添加了一個新的方便類: Objects

它有一個完全符合這個的方法: Objects.equals(Object a, Object b)

Apache Commons Lang有這樣一個方法: ObjectUtils.equals(object1,object2) 你不希望在這種方法上使用泛型,它會導致偽造的編譯錯誤,至少在一般情況下是這樣。 Equals非常清楚(或者應該 - 它是合同的一部分)來檢查對象的類並返回false,因此它不需要任何額外的類型安全性。

FWIW,這是我的實施:

private static boolean equals(Object a, Object b) {
    return a == b || (a != null && a.equals(b));
}

在我的應用程序中,我知道a和b將始終是相同的類型,但我懷疑即使它們不是這樣也能正常工作,前提是a.equals()是合理實現的。

public static boolean equals(Object object1, Object object2) {
    if (object1 == null || object2 == null) {
        return object1 == object2;
    }
    return object1.equals(object2);
}

如果你擔心NullPointerExceptions,你可以測試相等,如:

if (obj1 != null && obj1.equals(obj2)) { ... }

equals()的一般契約是非null對象永遠不應該等於null引用,並且如果要將對象與null引用進行比較(而不是拋出NPE),則equals()方法應返回false 。

每當我遇到需求並認為“這是如此常見的Java必須擁有它”但發現它沒有,我檢查Jakarta Commons項目。 它幾乎總是有它。 快速搜索commons-lang API(具有最基本的常用實用程序)顯示了一個提供所需內容的equals()方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM