Myślę, że moja odpowiedź może być bardziej zrozumiała:
Istnieją dwie różnice między &
i &&
.
Jeśli używają logicznego AND
&
i &&
może być logiczne AND
, kiedy &
lub &&
w lewo i prawo wyrażenie doprowadzić wszystko prawda, cała operacja może być wynikiem prawda.
kiedy &
i &&
co logiczne AND
, istnieje różnica:
gdy jest używane &&
jako logiczne AND
, jeśli wynik lewego wyrażenia jest fałszywy, prawe wyrażenie nie zostanie wykonane.
Weź przykład:
String str = null;
if(str!=null && !str.equals("")){ // the right expression will not execute
}
Jeśli używasz &
:
String str = null;
if(str!=null & !str.equals("")){ // the right expression will execute, and throw the NullPointerException
}
Inny przykład:
int x = 0;
int y = 2;
if(x==0 & ++y>2){
System.out.print(“y=”+y); // print is: y=3
}
int x = 0;
int y = 2;
if(x==0 && ++y>2){
System.out.print(“y=”+y); // print is: y=2
}
& może być używany jako operator bitowy
&
może być używany jako AND
operator bitowy , &&
nie może.
Operator bitowy AND „&” daje 1 wtedy i tylko wtedy, gdy oba bity w jego operandach są równe 1. Jednakże, jeśli oba bity są równe 0 lub oba bity są różne, wtedy ten operator daje 0. Aby być bardziej precyzyjnym bitowym Operator AND „&” zwraca 1, jeśli którykolwiek z dwóch bitów to 1, i zwraca 0, jeśli którykolwiek z bitów ma wartość 0.
Ze strony wiki:
http://www.roseindia.net/java/master-java/java-bitwise-and.shtml