Javaで条件文を連鎖させる方法で、b
がfalseの場合にc
をチェックしないようにする方法は?
a
とc
がfalseで、b
がtrueの場合、c
はチェックされますか?
if (a || b || c)
私はPHPがOR
と||
の違いで保持する類似の機能を探しています
Java ||
operator(logical or operator)は、左のオペランドがtrue
の場合、追加の引数を評価しません。それを実行したい場合は、|
(bitwise or operator )、ただし、名前によれば、これはちょっとしたハックです。
http://docs.Oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.2
したがって、&&はブールオペランドの&と同じ結果を計算します。これは、右側のオペランド式が常にではなく条件付きで評価されるという点でのみ異なります。
http://docs.Oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.24
したがって、|| |と同じ結果を計算しますブール値またはブール値のオペランド。これは、右側のオペランド式が常にではなく条件付きで評価されるという点でのみ異なります。
補足:副作用のあるコードを条件付きで呼び出すためにこれらのセマンティクスに依存することは、悪いプログラミングスタイルと見なされます。
c
はチェックされません。これを証明するには、次のコードを使用できます。
boolean a() {
System.out.println("a")
return false;
}
boolean b() {
System.out.println("b")
return true;
}
boolean c() {
System.out.println("c")
return true;
}
void test() {
if(a() || b() || c()) {
System.out.println("done")
}
}
出力は次のようになります。
a
b
done
if(a || b || c)
あなたの場合、
aがtrueの場合、bおよびcはチェックされません。
aがfalseでbがtrueの場合、cはチェックされません。
aとbがfalseの場合、cがチェックされます。
演算子の左側が最初に評価されます
a
が偽でb
が真の場合、c
は評価されません。
この answer を参照してください。これは、Javaの論理演算子の短絡に対処します。
1)Javabがfalseの場合に、チェックしないc?
c
を殺すことは重要ではありませんif (a || b)
ですif (a || (b && c))
2)aとcがfalseで、bがtrueの場合、cはチェックされますか? [if(a || b || c)]
||
は短絡評価を行います。したがって、a
がfalse
の場合、b
がチェックされ、b
がtrueの場合、c
はチェックされません短絡評価の詳細: 参照