Tout est dans le titre.
Merci à vous
Version imprimable
Tout est dans le titre.
Merci à vous
Bonjour,
La première, a et b sont évalués tandis que la deuxième court-circuite b (b n'est pas évalué) si a vaut true.
Ho okay merci,
Donc la deuxième est plus optimisée (dans un cas classique).
Quand tu fais if(a | b)
alors java évalue a et évalue aussi b
ensuite il se pose la question de savoir si l'un des deux est vrai.
Quand tu fais if(a || b)
alors java évalue a et se pose tout de suite la question : est-ce que a est vrai ?
si oui alors je n'ai pas besoin d'évaluer b.
Salut,
Le premier (|) est dit ou bit-à-bit et sert à faire des combinaisons de bits. Avec des opérandes booléennes il donnera le même résultat que le "ou logique" (||), mais dans le "ou logique" il s'agit de combiner des résultats de condition booléenne : lorsque l'évaluation du premier opérande suffit à déterminer la valeur de l'opération, l'opération n'est pas effectuée, et, surtout, le second opérande n'est pas évalué.
Non seulement, ça va plus vite, mais en plus ça peut être très utile :
ne causera pas de NullPointerExceptionCode:if ( var==null || var.equals( autreVar ) ) {
alors que (if ( var==null | var.equals( autreVar ) ) si, si var est null.
Pour le ou bit-à-bit, il permet de travailler par exemple avec des masques de bits : on peut combiner ainsi des constantes dont la valeur est une puissance de 2 afin d'avoir un paramètre qui combine les paramètres que l'on désire.
Code:
1
2
3 public static final int PARAM_1 = 1<<0; // vaut 1 public static final int PARAM_2 = 1<<1; // vaut 2 public static final int PARAM_2 = 1<<2; // vaut 4
pour reilire, on utilisera un & :Code:int params = PARAM1 | PARAM2; // params combine 1 & 2 (vaut 3)
Code:
1
2
3
4
5 if ( (params & PARAM1)!=0 ) { // ou (params & PARAM1)==PARAM1 // l'option PARAM1 est active }