En Java, qui sera plus efficace, et quelles sont les différences?
if (null == variable)
ou
if (variable == null)
(Similaire à cette question: Différence entre null == objet et objet == null )
Je dirais qu'il n'y a absolument aucune différence de performance entre ces deux expressions.
Chose intéressante cependant, le bytecode compilé (tel qu'émis par OpenJDKs javac) semble un peu différent pour les deux cas.
Pour boolean b = variable == null
:
3: aload_1 // load variable
4: ifnonnull 11 // check if it's null
7: iconst_1 // Push 1
8: goto 12
11: iconst_0 // Push 0
12: istore_2 // store
Pour boolean b = null == variable
:
3: aconst_null // Push null
4: aload_1 // load variable
5: if_acmpne 12 // check if equal
8: iconst_1 // Push 1
9: goto 13
12: iconst_0 // Push 0
13: istore_2 // store
Comme le dit @Bozho, variable == null
est le style le plus courant, par défaut et préféré.
Pour certaines situations cependant, j'ai tendance à mettre le null
devant. Par exemple dans le cas suivant:
String line;
while (null != (line = reader.readLine()))
process(line);
Cela s'appelle "Conditions Yoda" et le but est de vous empêcher d'utiliser accidentellement l'affectation (=
) au lieu de vérifier l'égalité (==
).
Aucune différence.
if (variable == null)
est (imo) un meilleur style de programmation.
Notez que null
est en minuscule en Java.
aucune différence
(null == variables)
était parfois utilisé au bon vieux temps (langage C) pour éviter d'écrire: (variable = NULL)
par erreur
Réponse courte: pas de différence.
Réponse plus longue: il y a une différence stylistique qui est plutôt subjective. Certaines personnes soutiennent que les constantes devraient être à gauche comme style défensif au cas où vous auriez mal tapé ==
en =
. Certaines personnes soutiennent que les constantes devraient être dans le bon sens car elles sont plus naturelles et lisibles.
Un langage bien conçu combiné avec un bon compilateur et des outils d'analyse statique, la paranoïa peut être minimisée, vous devez donc écrire le code le plus lisible et le plus naturel, qui serait la constante à droite.
Veuillez utiliser la fonction de recherche la prochaine fois.
Le premier est un blocage de C où il est parfaitement légal d'écrire if(variable = NULL)
Il n'y a pas de différence significative du point de vue des performances.
Cependant ... que faire si vous avez fait une faute de frappe et manqué un seul caractère égal?
foo = null; // assigns foo to null at runtime... BAD!
versus
null = foo; // compile time error, typo immediately caught in editor,
developer gets 8 hours of sleep
C'est un argument en faveur du début d'un test if avec null sur le côté gauche.
Le deuxième argument en faveur du début d'un test if avec null est qu'il est très clair pour le lecteur du code qu'il regarde un test null, même lorsque l'expression à droite du signe égal est verbeuse.
@ aiooba pointe également ce deuxième argument:
Pour certaines situations cependant, j'ai tendance à mettre le nul devant. Par exemple dans le cas suivant:
String line;
while (null != (line = reader.readLine()))
process(line);
Mon avis: ne vous souciez pas de ces optimisations de performances insignifiantes. Si vous avez de mauvaises performances, recherchez et ciblez les vrais problèmes/goulots d'étranglement dans votre code.