2010-01-29 14 views
10

volte, vedo questo:controllare se due oggetti sono uguali anche se potrebbero essere nullo

if (a.equals(b)) do(something); 

Tuttavia, se a è nullo, un NullPointerException è gettato. Supponendo che quando a==null e b==null o se solo a==b che vorrei do(something). Qual è il modo più semplice per eseguire questo controllo senza ottenere un'eccezione?

+0

Gestione null come caso speciale? Sembra una soluzione così banale che presumo ci sia una ragione per cui non puoi farlo? Si prega di elaborare. –

+0

Questo sembra così banale vero? Sembra che ne abbia sconcertati altri due. Questo renderebbe un'interessante domanda di intervista. Non è difficile, ma è difficile da fare in un modo semplice. – User1

+0

A volte le cose che sembrano semplici non sono sempre le più facili da realizzare. Questa è stata la prima lezione che ho imparato nel calcolo e cercare il trucco in qualsiasi cosa mi ha salvato da un sacco di passaggi falsi – Jason

risposta

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

(Il a==b gestisce il caso quando entrambi sono nulli.)


anche essere consapevoli di Java 7 e sopra Object.equals metodo:

if(java.util.Object.equals(a, b)) 
+4

+1, questo è praticamente ciò che fanno anche vari metodi di utilità .equals(). Ad esempio: http://commons.apache.org/lang/api/org/apache/commons/lang/ObjectUtils.html#equals%28java.lang.Object,%20java.lang.Object%29 – PSpeed

+1

Poiché non tutti gli uguali() i metodi contengono l'ottimizzazione "if (o == this) return true", penso che questa formulazione sia il chiaro vincitore, ed è ciò che ho usato nel metodo Objects.equal() di Guava. –

+0

Ottima risposta. Solo una nota: nella tua risposta, ** l'oggetto ** dovrebbe essere ** Oggetti ** –

24

Un altro modo di scrittura .

if (a == null ? b == null : a.equals(b)) 
+1

Legge abbastanza bene! – fastcodejava

+3

Molto più leggibile della risposta accettata –

+0

@Steve: è una questione di opinione. –

Problemi correlati