Qu’est-ce qui est plus efficace: si (null == variable) ou si (variable == null)?

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.

    Questions connexes

    Veuillez utiliser la fonction de recherche la prochaine fois.

    • Différence entre object null == et object == null
    • Quelle est la différence entre null! = object et object! = null
    • quel chemin est le mieux “null! = object” ou “object! = null”?
    • Pourquoi voit-on souvent «null! = Variable» au lieu de «variable! = Null» en C #?
    • ‘…! = Null’ ou ‘null! =…’ Meilleure performance?

    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。