logical_expression ::= ( "!" expression ) | ( expression ( "ampersand" | "ampersand=" | "|" | "|=" | "^" | "^=" | ( "ampersand" "ampersand" ) | "||=" | "%" | "%=" ) expression ) | ( expression "?" expression ":" expression ) | "true" | "false"
This rule is called by-> expression
Opération | Signification |
! a | NON a |
a & b | a ET b |
a && b | a ET b (voir ci-dessous) |
a &= b | équivalent à a = a & b |
a | b | a OU b |
a || b | a OU b |
a |= b | équivalent à a = a | b |
a ^ b | a OU-exclusif b (xor) |
a ^= b | équivalent à a = a ^ b |
true | vrai |
false | faux |
Les opérateurs doubles, comme ||
et &&
donnent le
même résultat que les opérateurs |
et &
, sauf qu'ils
arrêtent d'évaluer l'expression à partir du moment ou le résultat final est connu.
Par exemple, lorsque l'on évalue true || meth()
, aucun appel à
méthode ne sera effectué, car de toute façon, quelqu'en soit le résultat, l'expression
sera vraie. De même si l'on évalue false && meth()
, car l'expression
sera fausse. Naturellement, l'évaluation se fait de gauche à droite.
Il existe également un opérateur spécial, qui permet de faire des tests sans
l'aide de l'instruction if
. Il s'agit de
l'opérateur "ternaire" (il travaille avec trois opérande) :
condLe résultat de cette opération dépend de l'expression booléenne cond. Si cond est vrai, alors le résultat de cette expression sera v(), sinon, ce sera f().?
v():
f()
Cette dernière opération est très pratique lorsque l'on veut attribuer des valeurs par défaut à des variables, comme ci-dessous :
nom = saisieNom();
nom = (nom == null) ? "inconnu" : nom;
/** retourne le plus petit entier de a et b */
public int min(int a,int b) {
return (a < b) ? a : b;
}