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?
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?
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)
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
@KaliMa c'est correct. Le '(b == null)' pourrait être écrit comme '(a == b)', alternativement, mais je pense que c'est plus confus. –
Utilisez
if (null != a && null != b && a.compareTo(b) == 0) {
// whatever goes here
}
Que se passe-t-il si a et b sont nuls? – KaliMa
@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 –
Objects.compare (null, null) semble être vrai, cependant; ce qui est aussi le comportement que je m'attendais honnêtement – KaliMa
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.
Ceci n'est pas correct. Vous avez besoin de 'a! = Null && a.equals (b)'. –
merci Andy, édité. – wolle
Une façon courte pourrait être:
boolean c = (a != null && b != null) ? a.equals(b) : false;
if (c){
...
}
'Objets.équals (a, b)'. –
"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'. –
@AndyTurner 'Objects.equals' depuis Java 7. Autrement, les bons anciens contrôles' null'. – Mena