2016-10-20 1 views
2

En Java, le double majuscule peut être nul.Test de l'égalité avec les doublons

Cependant, si j'ai double a et b et je fais ceci:

if (a.equals(b)) 

il se bloque si l'un d'entre eux est nulle. Y a-t-il une meilleure façon de les comparer?

+1

'Objets.équals (a, b)'. –

+2

"il se bloque si l'un d'entre eux est nul" Plus précisément, il se bloque si 'a' est nul. Peu importe à propos de 'b'. –

+1

@AndyTurner 'Objects.equals' depuis Java 7. Autrement, les bons anciens contrôles' null'. – Mena

Répondre

2

La façon la plus simple en Java 7+ est:

Objects.equals(a, b) 

Si vous utilisez une version antérieure de Java, vous pouvez utiliser l'opérateur conditionnel:

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

Lire cette dernière déclaration à haute voix pour ma propre clarté: Pour que 'a.equals (b)' fonctionne, 'a' ne doit pas être nul (puisqu'il n'y a pas de 'null.equals (b)'). Mais si 'a' est nul, alors nous vérifions simplement si' b' est également nul. – KaliMa

+0

@KaliMa c'est correct. Le '(b == null)' pourrait être écrit comme '(a == b)', alternativement, mais je pense que c'est plus confus. –

-1

Utilisez

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

Que se passe-t-il si a et b sont nuls? – KaliMa

+0

@KaliMa alors ce serait faux, ce qui me paraît logiquement correct puisque les valeurs nulles ne seraient généralement pas considérées comme égales. Si vous avez besoin du code pour s'exécuter sur des valeurs égales ou si les deux sont NULL, vous pouvez juste ajouter cela comme une condition ou à l'expression booléenne –

+1

Objects.compare (null, null) semble être vrai, cependant; ce qui est aussi le comportement que je m'attendais honnêtement – KaliMa

0

Ceci est correct et, malheureusement, vous devez ajouter null contrôles supplémentaires. Vous avez donc soit d'écrire

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

ou votre code ne doit pas accepter null valeurs.

+0

Ceci n'est pas correct. Vous avez besoin de 'a! = Null && a.equals (b)'. –

+0

merci Andy, édité. – wolle

0

Une façon courte pourrait être:

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