logical_expression
::=
( "!" expression )
| ( expression
( "ampersand"
| "ampersand="
| "|"
| "|="
| "^"
| "^="
| ( "ampersand" "ampersand" )
| "||="
| "%"
| "%=" )
expression )
| ( expression "?" expression ":" expression )
| "true"
| "false"
This rule is called by-> expression
Explications| 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 :
Exemples
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;
}