2016-10-20 45 views
2

在Java中,大寫Double可以爲null。測試與Doubles的相等性

但是,如果我有雙打ab和我這樣做:

if (a.equals(b)) 

崩潰,如果他們中的一個爲空。有沒有更好的方法來比較它們?

+1

'Objects.equals(a,b)'。 –

+2

「如果其中一個爲空,它會崩潰」具體來說,如果'a'爲空,則崩潰。對'b'無所謂。 –

+1

@AndyTurner'Objects.equals'自Java 7.否則,好的舊'null'檢查。 – Mena

回答

2

在Java中7+最簡單的方法是:

Objects.equals(a, b) 

如果您使用的是Java的早期版本,你可以使用條件運算符:

(a != null) ? a.equals(b) : (b == null) 
+0

爲了我自己的理解,大聲讀出最後一個語句:對於'a.equals(b)'工作,'a'不能爲null(因爲沒有'null.equals(b)'這樣的事情)。但是如果'a'爲空,那麼我們只需檢查'b'是否爲空。 – KaliMa

+0

@KaliMa,這是正確的。 '(b == null)'可以寫成'(a == b)',或者,但我認爲這更令人困惑。 –

-1

使用

if (null != a && null != b && a.compareTo(b) == 0) { 
    // whatever goes here 
} 
+0

如果a和b爲空,該怎麼辦? – KaliMa

+0

@KaliMa那麼這將是錯誤的,這在邏輯上似乎對我來說是正確的,因爲空值通常不會被認爲是平等的。如果你需要在相同的值上執行代碼,或者兩者都爲null,那麼你可以將它作爲條件添加到布爾表達式 –

+1

Objects.compare(null,null)似乎是真的,但是;這也是我所期望的行爲 – KaliMa

0

這是正確的,可悲的是,你必須添加額外的空檢查。 所以,你或者可以寫入

if ((a != null && a.equals(b)) || (a == null && b == null)) 

或代碼不得接受null值。

+0

這是不正確的。你需要'a!= null && a.equals(b)'。 –

+0

謝謝安迪,編輯它。 – wolle

0

短的方式可以是:

boolean c = (a != null && b != null) ? a.equals(b) : false; 
if (c){ 
    ... 
}