Possible Duplicates: Javaにおける|と|の違いは何ですか? 【&と&の違い】(https://stackoverflow.com/questions/5564410/difference-in-and)
ちょっと気になったのですが、&と&&の違いは何でしょうか?
数日前に書いたif
文の条件は以下のようなものでした。
if(x < 50 && x > 0)
しかし、&&を&だけに変更したところ、エラーが出なくなりました。 何が違うのでしょうか?
例を挙げます。 こんな簡単なプログラムをコンパイルしました。
package anddifferences;
public class Main {
public static void main(String[] args) {
int x = 25;
if(x < 50 && x > 0) {
System.out.println("OK");
}
if(x < 50 & x > 0) {
System.out.println("Yup");
}
}
}
印刷されたのは、"OK"と"Yup"でした。 2つとも動作するならどちらを使ってもいいのでしょうか?
&は、各オペランドのビットを比較するビットごとのAND演算子です。
例えば、以下のようになります。
int a = 4;
int b = 7;
System.out.println(a & b); // prints 4
//meaning in an 32 bit system
// 00000000 00000000 00000000 00000100
// 00000000 00000000 00000000 00000111
// ===================================
// 00000000 00000000 00000000 00000100
&は、オペランドのブール値のみを比較する論理AND演算子です。論理値を示す2つのオペランドを受け取り、それらに対して遅延評価を行います。
'&'は両方のテストを実行しますが、 '&&'は最初のテストも真である場合に2番目のテストを実行するだけです。これはshortcircuitingと呼ばれ、最適化と考えられます。これは特にnullness(NullPointerException)に対するガードに有効です。
if( x != null && x.equals("*BINGO*") {
then do something with x...
}