Wie funktioniert eine Java if-Anweisung , wenn sie eine Zuweisung und eine Gleichheitsprüfung OR
-d zusammen hat?
public static void test() {
boolean test1 = true;
if (test1 = false || test1 == false) {
System.out.println("TRUE");
} else {
System.out.println("FALSE");
}
}
Warum ist dieser Druck FALSCH?
java
if-statement
logic
RoHaN
quelle
quelle
test1=false
,test1==false
Istfalse
,false || false
ist ,false or false
das istfalse
.test1 = true
Antworten:
Der Ausdruck wird nicht so analysiert, wie Sie denken. Es ist nicht
in welchem Fall wäre das Ergebnis gewesen
true
, aberDer Wert des
false || test1 == false
Ausdrucks wird zuerst berechnet, und es istfalse
, weiltest1
eingestellt wirdtrue
gehen in die Berechnung.Der Grund, warum es auf diese Weise analysiert wird, ist, dass die Priorität von der
||
niedriger als die des==
Operators ist, aber höher als die Priorität des Zuweisungsoperators=
.quelle
((test1 = false) || test1 == false)
der Gesamtwert wäretrue
.==
oben||
, aber=
unten||
.||
) eine niedrigere Priorität einräumt . Der relative Vorrang||
und ist==
nur relevant, dass das Parsen zu zeigen , ist nicht wie intest1 = ((false || test1) == false)
, das glaube ich nicht , dass jemand vernünftig (übrigens , dass die relativen Vorrang erwarten würde, oder allgemeiner , dass||
,&&
haben eine niedrigere Priorität als die Beziehungen, ist auch leicht zu Denken Sie daran, da immer verwendet).||
und==
vs||
und=
erklärt, warum sich dies anders verhält als der (allgemeine) Fall vona == b || c == d
.Dies ist im Grunde ein Vorrang. Sie gehen davon aus, dass Ihr Code entspricht:
... aber es ist nicht. Es ist eigentlich gleichbedeutend mit:
... was entspricht:
(weil
test1
ist mittrue
zu beginnen)... was entspricht:
die weisen den Wert
false
zutest1
, mit dem Ergebnis der Expression , währendfalse
.Im Java-Tutorial zu Operatoren finden Sie eine nützliche Tabelle mit der Priorität von Operatoren.
quelle
Der Ausdruck
test1 = false || test1 == false
wird im folgenden Schritt ausgewertet.SCHRITT: 1-
test1 = false || test1 == false
// Vorrang von==
ist am höchstenSCHRITT: 2-
test1 = false || false
// Operator||
hat eine höhere PrioritätSCHRITT 3-
test1 = false
SCHRITT 4-
false
Da der boolesche Wert des Ausdrucks falsch wird, wird die Anweisung else ausgeführt.
quelle
(test1 = false || test1 == false)
gibt false zurück, da beide false sind.(test1 = false || test1 == true)
das ist wahr, weil einer von ihnen wahr istquelle