web-dev-qa-db-ja.com

Java OR演算子の優先順位

Javaで条件文を連鎖させる方法で、bがfalseの場合にcをチェックしないようにする方法は?

acがfalseで、bがtrueの場合、cはチェックされますか?

if (a || b || c)

私はPHPがOR||の違いで保持する類似の機能を探しています

8
Szymon Toda

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

したがって、|| |と同じ結果を計算しますブール値またはブール値のオペランド。これは、右側のオペランド式が常にではなく条件付きで評価されるという点でのみ異なります。

補足:副作用のあるコードを条件付きで呼び出すためにこれらのセマンティクスに依存することは、悪いプログラミングスタイルと見なされます。

14
Silly Freak

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
2
Weibo Li

if(a || b || c)

あなたの場合、

aがtrueの場合、bおよびcはチェックされません。

aがfalseでbがtrueの場合、cはチェックされません。

aとbがfalseの場合、cがチェックされます。

演算子の左側が最初に評価されます

1

aが偽でbが真の場合、cは評価されません。

この answer を参照してください。これは、Javaの論理演算子の短絡に対処します。

0
Louis

1)Javabがfalseの場合に、チェックしないc

  • なぜそれが必要なのですか? ORロジック-常にcを殺すことは重要ではありません
  • だからあなたの答えは単にif (a || b)です
  • またはあなたが探しているのかもしれませんif (a || (b && c))

2)aとcがfalseで、bがtrueの場合、cはチェックされますか? [if(a || b || c)]

  • いや
  • ||は短絡評価を行います。したがって、afalseの場合、bがチェックされ、bがtrueの場合、cはチェックされません

短絡評価の詳細: 参照

0
Mitesh Pathak