En Java, lequel sera le plus efficace et quelles sont les différences?
if (null == variable)
ou
if (variable == null)
(Similaire à cette question: Différence entre null == object et object == null )
Je dirais qu’il n’y a absolument aucune différence de performance entre ces deux expressions.
Chose intéressante, le bytecode compilé (tel qu’émis par Suns javac) est 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 @Bozho le dit, variable == null
est le style le plus répandu, par défaut et préféré.
Pour certaines situations cependant, j’ai tendance à mettre le null
devant. Par exemple dans le cas suivant:
Ssortingng 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’assignation ( =
) au lieu de la vérification d’é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é dans le 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 plutôt subjective. Certaines personnes soutiennent que les constantes devraient être dans la gauche comme un style défensif au cas où vous auriez mal écrit ==
dans =
. Certaines personnes soutiennent que les constantes devraient être dans le droit car elles sont plus naturelles et lisibles.
Un langage bien conçu, combiné à un bon compilateur et à des outils d’parsing statique, permet de minimiser la paranoïa. Vous devez donc écrire le code le plus lisible et le plus naturel, ce 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 matérielle du sharepoint vue des performances.
Cependant … et si vous faisiez une faute de frappe et que vous manquiez un seul personnage égal?
foo = null; // assigns foo to null at runtime... BAD!
contre
null = foo; // comstack time error, typo immediately caught in editor, developer gets 8 hours of sleep
Ceci est un argument en faveur du début d’un test if avec null à 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 examine 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 null devant. Par exemple dans le cas suivant:
Ssortingng line; while (null != (line = reader.readLine())) process(line);
Mon avis: Ne vous souciez pas de ces optimisations de performances insignifiantes. Si vous avez des performances médiocres, recherchez et ciblez les véritables problèmes / goulots d’étranglement de votre code.
Il n’y a pas de différence。