-7

重複の可能性:
&と&&の違い

if (true && true) {
    System.out.println("test if");
}

if (true & true) {
    System.out.println("test if");
}

両方とも同じ出力を提供します。なぜですか?

4

7 に答える 7

7

&&短絡しますが、そうで&はありません。例:

if (methodA() && methodB()) {
    ...
}

その場合、methodA既に false を返している場合methodBは呼び出されません。正式には、式がある場合a && bbは に評価された場合にのみ評価aされtrueます。

明らかなパフォーマンス上の利点とは別に、これはnullチェックに特に役立ちます。

if (x != null && x.getSomeValue()) {
    ...
}

&ここでas single を使用すると、 x.getSomeValue()was であっても評価され、例外xが発生します。null

于 2012-09-25T07:22:24.653 に答える
1

最初のケースでは、 if の 2 番目の部分をテストしません。&&演算子は左から右に実行され、最初のfalse値で停止します。

これは、次の場合に役立ちます。

if (a!=null && a.doSomething()==23) {

nullPointerException を防ぐためです。

ブール条件をテストするときは、常に を使用します&&

于 2012-09-25T07:21:08.547 に答える
1

&ビット操作です

&&2 つのブール値を論理的にリンクします

于 2012-09-25T07:21:36.947 に答える
1

参照してください: http://www.jguru.com/faq/view.jsp?EID=16530

引数の種類によって異なります...

整数引数の場合、単一のアンパサンド (「&」) は「ビット単位の AND」演算子です。2 つのアンパサンド ("&&") は、2 つのブール引数以外には定義されていません。

ブール引数の場合、1 つのアンパサンドは (無条件の) 「論理 AND」演算子を構成し、2 つのアンパサンド (「&&」) は「条件付き論理 AND」演算子を構成します。つまり、1 つのアンパサンドは常に両方の引数を評価しますが、2 つのアンパサンドは最初の引数が true の場合にのみ 2 番目の引数を評価します。

他のすべての引数の型と組み合わせについては、コンパイル時エラーが発生するはずです。

于 2012-09-25T07:21:59.530 に答える
0

& ステートメントでは、ステートメントの左側と右側の両方をチェックします。&& では、ステートメントの片側のみをチェックします (片側が true の場合、反対側はチェックしません)。

于 2012-09-25T07:21:58.790 に答える
0

&& は論理積です

したがって、両方のステートメントが true になるようにする必要があります。

& はビットごとの AND 演算子です

ここを見てください:

http://www.javaforstudents.co.uk/TrueFalse

于 2012-09-25T07:22:02.417 に答える
0

&& は論理積です。true && true は true で、それ以外はすべて false です。& はビット単位の and です。(10 & 8) = 8

于 2012-09-25T07:27:21.570 に答える