Creo que mi respuesta puede ser más comprensible:
Hay dos diferencias entre &
y &&
.
Si usan como lógico Y
&
y &&
puede ser lógico AND
, cuando el resultado de la expresión izquierda &
o &&
derecha es verdadero, todo el resultado de la operación puede ser verdadero.
cuando &
y &&
como es lógico AND
, hay una diferencia:
cuando se usa &&
como lógico AND
, si el resultado de la expresión izquierda es falso, la expresión derecha no se ejecutará.
Toma el ejemplo:
String str = null;
if(str!=null && !str.equals("")){ // the right expression will not execute
}
Si usa &
:
String str = null;
if(str!=null & !str.equals("")){ // the right expression will execute, and throw the NullPointerException
}
Otro ejemplo más:
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
}
& se puede utilizar como operador de bits
&
se puede usar como AND
operador Bitwise , &&
no se puede.
El operador AND "&" bit a bit produce 1 si y solo si ambos bits en sus operandos son 1. Sin embargo, si ambos bits son 0 o ambos bits son diferentes, entonces este operador produce 0. Para ser más preciso a nivel bit Y el operador "&" devuelve 1 si alguno de los dos bits es 1 y devuelve 0 si alguno de los bits es 0.
Desde la página wiki:
http://www.roseindia.net/java/master-java/java-bitwise-and.shtml