c'est une petite question sans importance ...( ca n'existe pas ) mais je la pose ..
ca signifie quoi d'ecrire ceci:
if( null== maVariable) ou bien if(null != maVariable)
( y a t il un interet particulier , une raison organique !!!)
merci ...
c'est une petite question sans importance ...( ca n'existe pas ) mais je la pose ..
ca signifie quoi d'ecrire ceci:
if( null== maVariable) ou bien if(null != maVariable)
( y a t il un interet particulier , une raison organique !!!)
merci ...
si ta variable représente un objet elle contient en réalité une référence sur cet objet, et donc si elle contient la référence null c'est qu'elle ne pointe vers aucun objet.
Certaines méthode quand elle rencontre un erreur ou qu'elles n'ont pas trouvé l'élément demandé lors d'une recherche renvoient null à la place d'une référence valide (en effet, dans le cadre d'une recherche, comment renvoyer quelque chose qu'on n'a pas trouvé ?).
Avec un objet, l'utilisation des opérateurs == et != sert à comparer les références (pour comparer les objets eux-mêmes il faut utiliser la méthode equals(Object o)).
Tu peux toi-même initialiser une propriété de classe à null sachant qu'elle ne va servir que plus tard et vérifier si la référence est invalide avant son utilisation afin de lui affecter une valeur.
Prenons l'exemple d'un Singleton ; il est fréquent de voir ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 public final class UnSingleton { //Initialisation à null de la référence sur l'instance unique. private UnSingleton leSingleton = null; private UnSingleton { //Code d'initialisation } public UnSingleton getInstance() { if (leSingleton == null) { //Initialisation si ce n'est pas déjà fait. leSingleton = new UnSingleton(); } return leSingleton; } }
mais est ce que la syntaxe :
if(maVariavle==null)
est strictement equivalente à
if( null==maVariable)
ou y a t il une reelle difference!?
( c est comme ca que j aurais du formuler ma question!!)
Vois tu une différence entre
et
Code : Sélectionner tout - Visualiser dans une fenêtre à part if ( 1 == 2 )
?
Code : Sélectionner tout - Visualiser dans une fenêtre à part if ( 2 == 1 )
Tu compares toujours la même chose, donc non aucune différence
F.
De mémoire le nombre d'instruction machine est plus faible avec un
if ( null == monObjet )
...
que avec
if ( null != monObjet )
Maintenant tout dépends la manière dont le compilateur optimise le code, aujourd'hui le compilateur de la jvm est trés performant donc cela n'a plus d'importance (surtout avec la puissance des CPU).
Personnellement je préfère le comparateur d'égalité au comparateur de différence mais c'est certainement plus par habitude.
Salut,
En Java c'est exactement la même chose. Mais dans d'autre langage comme le C/C++ cet ordre d'écriture peut avoir une utilité.
En effet en C il n'existe pas de notion de booléen, et donc toutes valeurs "numériques" sont implicitement convertis en booléen lorsque c'est nécessaire :
- Si la valeur vaut 0, alors c'est considéré comme FALSE.
- Sinon c'est TRUE
Du coup on peut ce retrouver avec un code comme celui-ci :
Code C : Sélectionner tout - Visualiser dans une fenêtre à part if (maVariable = NULL)Ce n'est pas une comparaison mais une affectation (un seul =): on assigne donc NULL à maVariable et le résultat de la condition est NULL, donc FALSE !
Ce type d'erreur peut facilement arriver... et c'est pas forcément évident à détecter
En prenant l'habitude d'inverser les valeurs, c'est à dire en plaçant la constante littérale du coté gauche on peut éviter ce genre de soucis, car cela génèrera une erreur de compilation (on ne peut pas faire d'affectation sur une constante) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part if (NULL = maVariable) // ERREUR de compilation
En Java on n'a pas ce problème car il n'y a pas de conversion implicite en booléen, et donc ce code provoquera logiquement une erreur :
Toutefois lorsqu'on a pris l'habitude d'inverser les valeurs en C/C++ on le fait également dans d'autres langages où ce n'est pas forcément nécessaire
Code : Sélectionner tout - Visualiser dans une fenêtre à part if (maVariable = null) // ERREUR DE COMPILATION
A noter quand même que le problème peut se poser lorsqu'on utilise les booléens :
Mais dans ce cas on peut tout simplement éviter d'utiliser == et != mais vérifier directement la valeur du booléen :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 boolean b = false; if ( b = false ) { // On ne rentre jamais dans la boucle } if (false = b ) { // ERREUR DE COMPILATION }
a++
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 if ( ! b ) { }
PS : il n'y a pas de question bête![]()
Partager