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 ANDoperatore 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