[英]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
(顯然是真的)。 所以要比較你必須檢查a
和b
是否為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.