2010-10-27 3 views
1

Possible en double:
Null check in JavaQuelle est la différence de comparaison?

Je me demande quelle est la différence entre

if (null == something) {...} 

et

if (something == null) {...} 

en supposant que dans les deux cas something est le même objet. Vraisemblablement, il devrait y avoir non, sauf pour la lisibilité du code.

+0

Pas de diff.compte tenu des comportements et des performances –

+1

Cette question montre à nouveau que plus la question est simple, plus le bruit est élevé. 2 mauvaises réponses des 4 premières réponses, parce que tout le monde se précipite pour tenter le coup. – Daniel

+1

Voir [Vérification nulle en Java] (http://stackoverflow.com/questions/2369226/null-check-in-java) –

Répondre

6

Il n'y a pas de différence. L'idée de mettre la constante en premier aide à éviter une affectation accidentelle dans la condition. Par exemple, dans certaines langues, il est valable de dire:

if (i = 42) { 
    ... 
} 

i est affecté et la condition est vraie. Si vous n'avez pas voulu faire cela, il n'y a pas d'erreur de compilation et il peut être difficile à trouver.

Si vous place toujours mettre la première constante:

if (42 == i) { 
    ... 
} 

Puis le jour où vous faites accidentellement:

if (42 = i) { 
    ... 
} 

Une erreur du compilateur vous avertit immédiatement que vous tentez d'attribuer à une constante .

+0

+1 bonne explication – Daniel

+1

Il est également possible d'affecter dans l'état d'une instruction Java 'if', si le type de la variable affectée est' boolean' –

+0

Noted - edited. Merci! –

7

Les instructions sont complètement équivalentes.

Les différences ne se produisent que si vous utilisez des équations, et null n'est jamais utilisé explicitement.

if("A".equals(someString)) { ... } 

est null safe, car il n'échoue pas si someString est null.

if(someString.equals("A")) { ... } 

va évidemment échouer quand someString est null.

+0

Eh bien, la question ne concerne pas la méthode égale . –

+0

Oui, mais le questionneur avait l'idée vague que changer les opérandes d'une comparaison entraînerait des différences, ainsi je l'ai souligné, où il aurait pu voir ce concept et où il est applicable. – Daniel

0

Il n'y a pas de différence.

Ceci est juste pour se prémunir contre l'erreur commune d'utiliser = à la place de ==.

if (true = something) {...} 

donne une erreur, mais

if (something = true) {...} 

n'a pas, en supposant something est une variable booléenne.

+1

-1 La seconde donnera également une erreur. Encore une fois, ce n'est pas Java – Daniel

+0

Oups, merci pour le pointage. – codaddict

+0

@Daniel: pas si 'something' est un booléen (ce qui est le cas si vous lui attribuez la valeur true). Votre vote négatif est erroné. – JeremyP

Questions connexes