Java ifステートメントは、割り当てと等価性チェックOR
- dが一緒にある場合、どのように機能しますか??
public static void test() {
boolean test1 = true;
if (test1 = false || test1 == false) {
System.out.println("TRUE");
} else {
System.out.println("FALSE");
}
}
なぜこの印刷は偽ですか?
式は、あなたが考えているように解析されません。そうではありません
(test1=false) || (test1 == false)
その場合、結果はtrue
になりますが、
test1 = (false || test1 == false)
false || test1 == false
の値は最初に計算され、false
です。これは、test1
がtrue
に設定されているためです。
このように解析される理由は、||
の precedence が==
演算子のそれよりも低いが、割り当て演算子=
の優先順位よりも高いためです。
これは基本的に優先順位の問題です。あなたのコードは次のものと同等であると仮定しています:
if ((test1 = false) || (test1 == false))
...しかし、そうではありません。実際には次と同等です:
if (test1 = (false || test1 == false))
...これは次と同等です:
if (test1 = (false || false))
(test1
は最初はtrue
であるため)
...これは次と同等です:
if (test1 = false)
値false
をtest1
に割り当て、式の結果はfalse
になります。
演算子の優先順位の有用な表については、 演算子に関するJavaチュートリアル を参照してください。
式test1 = false || test1 == false
は、次のステップで評価されます。
STEP:1-test1 = false || test1 == false
// _==
の優先順位が最も高い
STEP:2-test1 = false || false
//演算子||
の優先度が高い
ステップ:3-test1 = false
ステップ:4-false
式のブール値がfalseになるため、elseステートメントが実行されます。