web-dev-qa-db-fra.com

Quelle est la plus efficace: if (null == variable) ou if (variable == null)?

En Java, qui sera plus efficace, et quelles sont les différences?

if (null == variable)

ou

if (variable == null)
41
Apache

(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);
66
aioobe

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é (==).

18
Edward Dale

Aucune différence.

if (variable == null) est (imo) un meilleur style de programmation.

Notez que null est en minuscule en Java.

16
Bozho

aucune différence

(null == variables) était parfois utilisé au bon vieux temps (langage C) pour éviter d'écrire: (variable = NULL) par erreur

12
dfens

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.

Questions connexes

Veuillez utiliser la fonction de recherche la prochaine fois.

8
polygenelubricants

Le premier est un blocage de C où il est parfaitement légal d'écrire if(variable = NULL)

7
Robert

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);
4
Robert Christian

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.

1
chiccodoro