Penso che la mia risposta possa essere più comprensibile:
Ci sono due differenze tra &
e&&
.
Se usano come AND logico
&
e &&
può essere logico AND
, quando il &
o&&
espressione left e right risultano tutte vere, l'intero risultato dell'operazione può essere vero.
quando &
e &&
come logicoAND
, c'è una differenza:
quando usato &&
come logicoAND
, se il risultato dell'espressione sinistra è falso, l'espressione destra non verrà eseguita.
Prendi l'esempio:
String str = null;
if(str!=null && !str.equals("")){ // the right expression will not execute
}
Se si utilizza &
:
String str = null;
if(str!=null & !str.equals("")){ // the right expression will execute, and throw the NullPointerException
}
Un altro esempio:
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
}
e può essere usato come operatore bit
&
può essere usato come AND
operatore Bitwise , &&
no.
L'operatore AND bit a bit "1" produce 1 se e solo se entrambi i bit nei suoi operandi sono 1. Tuttavia, se entrambi i bit sono 0 o entrambi i bit sono diversi, questo operatore produce 0. Per essere più precisi a bit a bit AND L'operatore "&" restituisce 1 se uno dei due bit è 1 e restituisce 0 se uno dei bit è 0.
Dalla pagina wiki:
http://www.roseindia.net/java/master-java/java-bitwise-and.shtml