108 votes

Null check in Java

J'ai entendu parler de quelqu'un qui null == object est mieux que object == null vérifier

par exemple :

void m1(Object obj ) {
   if(null == obj)  // Is this better than object == null ? Why ?
       return ;
   // Else blah blah
}

Est-il ou c'est un autre mythe ? Merci pour l'aide.

154voto

Laurence Gonsalves Points 50783

C'est probablement une habitude apprise à partir de C, pour éviter ce genre de faute de frappe:

if (object = null) {

La convention de mise à la constante sur le côté gauche de l' == n'est pas vraiment utile en Java et, depuis Java exige que l'expression en if s'évaluer à un boolean de la valeur, de sorte que si la constante est une boolean, vous obtiendrez une erreur de compilation soit la façon dont vous mettez les arguments. (et si c'est un booléen, vous ne devriez pas utiliser == de toute façon...)

38voto

Jon Skeet Points 692016

Comme d'autres l'ont dit, c'est une habitude appris de C pour éviter les fautes de frappe mais C je m'attends décent compilateurs à un assez haut niveau d'alerte de donner un avertissement. Comme Chandru dit, en comparant par rapport à null en Java ainsi que causer des problèmes si vous utilisez une variable de type Boolean (dont vous n'êtes pas dans l'exemple de code). Je dirais que c'est assez rare de la situation, et non pas celui pour lequel il vaut la peine de changer la façon dont vous écrivez du code partout ailleurs. (Je n'aurais pas pris la peine d'inverser les opérandes même dans ce cas, si je suis en train de penser assez clairement à envisager d'inverser eux, je suis sûr que je peux compter le nombre de signes "égal".)

Ce qui n'a pas été mentionné, c'est que beaucoup de gens (moi-même certainement inclus) trouver l' if (variable == constant) formulaire pour être plus lisible - c'est un moyen plus naturel de s'exprimer. C'est une raison de ne pas copier aveuglément une convention de C. Vous devez toujours remettre en question les pratiques (comme vous le faites ici :) avant de supposer que ce qui peut être utile dans un environnement qui est utile dans un autre.

29voto

Chandru Points 4770

Ce n'est pas de grande valeur en Java (1.5+) sauf lorsque le type de l'objet est - Boolean. Dans ce cas, cela peut encore être utile.

if (object = null) à ne pas provoquer l'échec de la compilation en Java 1.5+ si l'objet est - Boolean mais serait jeter un NullPointerException lors de l'exécution.

9voto

R Samuel Klatchko Points 44549

En Java il n'y a pas de bonne raison.

Un couple de d'autres réponses ont prétendu que c'est parce que vous pouvez accidentellement faire affectation au lieu de l'égalité. Mais en Java, vous devez avoir un booléen dans un si, donc:

if (o = null)

ne compilera pas.

La seule fois où cela pourrait avoir son importance en Java, si la variable est de type boolean:

int m1(boolean x)
{
    if (x = true)  // oops, assignment instead of equality

9voto

cherouvim Points 18550

Ceci est également étroitement liée à:

if ("foo".equals(bar)) {

ce qui est pratique si vous ne voulez pas avoir affaire avec des Npe:

if (bar!=null && bar.equals("foo")) {

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X