3

重複の可能性:
なぜ通常は使用し||ない|のですか、違いは何ですか?

JavaでのOR演算子(|| および)の使用法との違いを誰かが説明できますか?|ありがとう

例えば:

if(a || b) {
// Do something.
}

if(a | b) {
// Do something.
}
4

5 に答える 5

4

これは簡単です。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を参照してください。

于 2012-04-10T07:15:24.203 に答える
3

最初のものは論理またはです。演算子の両側はboolean値として処理され、結果として。になりbooleanます。問題の変数boolean自体がそうでない場合、それらがまたはである場合、それらはfalseになり0ますnull

2つ目は、ビット単位または演算子です。これは通常、整数でのみ機能します。2つの値を少しずつ比較し、結果の数値を示します。例えば:

5   | 6   = 7    (decimal)
101 | 110 = 111  (binary)

詳細については、ウィキペディアをご覧ください:論理和

于 2012-04-10T07:17:20.363 に答える
2

演算子を使用する場合|| JVMは、右側のオペランドだけをわざわざ評価することはありません。

于 2012-04-10T07:13:43.250 に答える
1

|| 演算子はブール演算子です

簡単な英語で次のように解釈できます...

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;
}
于 2012-04-10T07:15:20.397 に答える
1

前者は論理-または、後者はビット単位-またはです。ただし、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を与える)

于 2012-04-10T07:20:54.230 に答える