重複の可能性:
なぜ通常は使用し||
ない|
のですか、違いは何ですか?
JavaでのOR演算子(||
および)の使用法との違いを誰かが説明できますか?|
ありがとう
例えば:
if(a || b) {
// Do something.
}
と
if(a | b) {
// Do something.
}
重複の可能性:
なぜ通常は使用し||
ない|
のですか、違いは何ですか?
JavaでのOR演算子(||
および)の使用法との違いを誰かが説明できますか?|
ありがとう
例えば:
if(a || b) {
// Do something.
}
と
if(a | b) {
// Do something.
}
これは簡単です。http://www.roseindia.net/help/java/o/java-operator.shtmlによると:
OR演算子は一種の条件演算子であり、|で表されます。シンボル。変数の状態に基づいてtrueまたはfalseの値を返します。つまり、条件演算子を使用した演算は2つのブール式の間で実行されます。
OR演算子(|)は、Conditional-OR演算子(||)に似ており、そのオペランドのいずれかがtrueの場合、trueを返します。
注:||
オペレーターでは、複数の条件があり、最初の条件return true
の場合、他の条件は無視されますが、|
オペレーターではすべての条件が検査されます。
詳細については、http://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.htmlを参照してください。
最初のものは論理またはです。演算子の両側はboolean
値として処理され、結果として。になりboolean
ます。問題の変数boolean
自体がそうでない場合、それらがまたはである場合、それらはfalseになり0
ますnull
。
2つ目は、ビット単位または演算子です。これは通常、整数でのみ機能します。2つの値を少しずつ比較し、結果の数値を示します。例えば:
5 | 6 = 7 (decimal)
101 | 110 = 111 (binary)
詳細については、ウィキペディアをご覧ください:論理和
演算子を使用する場合|| JVMは、右側のオペランドだけをわざわざ評価することはありません。
|| 演算子はブール演算子です
簡単な英語で次のように解釈できます...
if ( a is true or b is true)
{
//do soemthing
}
| 演算子は論理演算子です
int、charなどの整数型でのみ機能します。
これは、2つのオペランドのビットごとのOR演算です。
例:
bool a = true;
bool b = false;
bool c = a | b;
//c will be true
if(a | b )
{
}
is same as
c = a | b;
if ( c == true)
{
do something;
}
前者は論理-または、後者はビット単位-またはです。ただし、2つの演算子(この例ではaとb)がブール値である場合、ビット単位(または論理和と見なされる)または短絡なしです。これは時々便利です。
たとえば、次のことを考慮してください。
boolean getTrue() {
System.out.println("getTrue() called");
return true;
}
public static void main(String[] args) {
boolean a = getTrue() || getTrue();
System.out.println("Result: " + a);
}
上記は、論理和(||)がgetTrue()を再度呼び出さなくても、式の結果をすぐに判別できるため、「getTrue()called」を1回だけ出力します。ビット単位のor(つまり、ブール値a = getTrue()| getTrue();)に変更すると、getTrue()が2回呼び出されます。
同様の結果は、ビットごとの&演算とgetFalse()メソッドで生成されます。
考慮すべきもう1つの側面は、ビット演算子が論理演算子よりも優先されることです。したがって、それらをビット単位で混合することはお勧めしません-または論理積の前に実行されます-そして、これは望ましくない動作を引き起こす可能性があります。角かっこ()を使用して修正できますが、これは避けるべきだと思います。
ちなみに、私はあなたの質問の反対票に同意しません、それは有効で良い質問です!(+1を与える)