Comment fonctionne un Java instruction if lorsqu'il a une affectation et un contrôle d'égalité OR
- d ensemble ??
public static void test() {
boolean test1 = true;
if (test1 = false || test1 == false) {
System.out.println("TRUE");
} else {
System.out.println("FALSE");
}
}
Pourquoi cette impression est-elle FAUX?
L'expression n'est pas analysée comme vous le pensez. Ce n'est pas
(test1=false) || (test1 == false)
auquel cas le résultat aurait été true
, mais
test1 = (false || test1 == false)
La valeur de false || test1 == false
l'expression est calculée en premier, et elle est false
, car test1
est défini sur true
dans le calcul.
La raison pour laquelle il est analysé de cette façon est que le précédence du ||
est inférieur à celui du ==
, mais supérieur à la priorité de l'opérateur d'affectation =
.
Il s'agit essentiellement d'une question de priorité. Vous supposez que votre code est équivalent à:
if ((test1 = false) || (test1 == false))
... mais ce n'est pas. C'est en fait équivalent à:
if (test1 = (false || test1 == false))
... ce qui équivaut à:
if (test1 = (false || false))
(car test1
est true
pour commencer)
... ce qui équivaut à:
if (test1 = false)
qui affecte la valeur false
à test1
, le résultat de l'expression étant false
.
Voir le tutoriel Java sur les opérateurs pour un tableau utile de priorité des opérateurs.
Expression test1 = false || test1 == false
sera évalué à l'étape suivante.
ÉTAPE: 1 -test1 = false || test1 == false
// priorité de ==
est le plus élevé
ÉTAPE: 2 -test1 = false || false
// Opérateur ||
ont une priorité plus élevée
ÉTAPE: 3 -test1 = false
ÉTAPE: 4 -false
Étant donné que la valeur booléenne de l'expression devient fausse, l'instruction else est en cours d'exécution.