Jak działa instrukcja if w Javie , gdy ma przypisanie i sprawdzenie równości OR
-d razem?
public static void test() {
boolean test1 = true;
if (test1 = false || test1 == false) {
System.out.println("TRUE");
} else {
System.out.println("FALSE");
}
}
Dlaczego to drukowanie jest FAŁSZEM?
java
if-statement
logic
RoHaN
źródło
źródło
test1=false
,test1==false
jestfalse
,false || false
jest,false or false
który jestfalse
.test1 = true
Odpowiedzi:
Wyrażenie nie jest analizowane w sposób, w jaki myślisz. To nie jest
w takim przypadku wynik byłby
true
, aleWartość
false || test1 == false
wyrażenia jest obliczana jako pierwsza i tak jestfalse
, ponieważtest1
jest ustawiona natrue
przejście do obliczeń.Powodem jest analizowany w ten sposób jest to, że pierwszeństwo z
||
jest mniejsza niż==
operatora, ale większa niż priorytetu operatora przypisania=
.źródło
((test1 = false) || test1 == false)
ogólna wartość będzietrue
.==
jest powyżej||
, ale=
jest poniżej||
.||
). Względne pierwszeństwo||
i==
ma znaczenie tylko pokazać, że parsowanie jest nie tak jak wtest1 = ((false || test1) == false)
, którym nie sądzę ktokolwiek oczekiwać (przy okazji, że względny priorytet, lub bardziej ogólnie, że||
,&&
mają niższy priorytet niż stosunków, jest również łatwy do pamiętaj, ponieważ używany przez cały czas).||
i==
vs||
oraz=
wyjaśnia, dlaczego zachowuje się inaczej niż (powszechny) przypadeka == b || c == d
.Zasadniczo jest to kwestia pierwszeństwa. Zakładasz, że Twój kod jest równoważny z:
... ale nie jest. W rzeczywistości jest to równoważne z:
... co jest równoważne z:
(bo
test1
matrue
się zacząć)... co jest równoważne z:
który przypisuje wartość
false
dotest1
, z wynikiem wyrażenia jestfalse
.Przydatną tabelę pierwszeństwa operatorów znajdziesz w samouczku Java dotyczącym operatorów .
źródło
Expression
test1 = false || test1 == false
oceni w następnym kroku.KROK: 1-
test1 = false || test1 == false
// pierwszeństwo==
jest najwyższeKROK: 2-
test1 = false || false
// Operator||
ma wyższy priorytetKROK 3-
test1 = false
KROK 4-
false
Ponieważ wartość logiczna wyrażenia staje się fałszywa, więc instrukcja jest wykonywana.
źródło
(test1 = false || test1 == false)
zwraca fałsz, ponieważ oba są fałszywe.(test1 = false || test1 == true)
to prawda, ponieważ jeden z nich jest prawdziwyźródło