簡體   English   中英

java - 如何比較兩個可能為null的對象?

[英]java - How to compare two objects that might be null?

我需要能夠比較兩個變量,這些變量有時可能為空。 如果它們都是空的,我仍然希望它被認為是平等的。 有沒有適當的方法來做到這一點?

我在NetBeans中測試它,並查看.equals()的文檔,並看到空引用表現得很奇怪。

這些是我的例子和結果:

Object a = null, b = null;
System.out.println(a == b);

返回true。

要么:

System.out.println(a.equals(b));

拋出NullPointerException。

= =在這種情況下我是如何工作的,或者我只是在這里'變得幸運'而且由於其他原因它得出的結論是“真的”?

NullPointerException也讓我感到困惑,因為我總是將Object的equals方法理解為引用相等。 文檔反復聲明“非空”對象,但為什么這對於參考比較有用呢? 任何澄清將不勝感激。

==運算符測試兩個變量是否具有相同的值。 對於對象引用,這意味着變量必須引用同一個對象(或者兩個變量都必須為null )。 當然, equals()方法要求調用它的變量不為null 它的行為取決於被引用的對象的類型(在實際對象上,而不是在聲明的類型上)。 默認行為(由Object定義)只是使用==

要獲得所需的行為,您可以:

System.out.println(a == null ? b == null : a.equals(b));

注意:從Java 7開始,您可以使用:

System.out.println(java.util.Objects.equals(a, b));

在內部做同樣的事情。

a.equals(b)返回NullPointerException,因為它是字面上的

null.equals(...)

和null沒有.equals(或任何其他方法)。

b.equals(a)相同的事情b.equals(a)

a == b返回true,因為它是null == null (顯然是真的)。 所以要比較你必須檢查ab是否為null或類似...

if (a != null) 
   return a.equals(b);  // This works because a is not null.  `a.equals(null)` is valid.  
else if (b != null) 
   return b.equals(a);  // a is null, but b is not
else 
   return a == b;

對於這個,?:運算符更加簡潔

您不能在null值上調用equals等方法。 如果你想要saftly使用一個方法,你必須檢查null值

if(a!=null)
    System.out.println(a.equals(b));
else
    System.out.println(a==b));

暫無
暫無

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

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