Creo que mi respuesta puede ser más comprensible:
Hay dos diferencias entre &
y &&
.
Si utilizan como lógica Y
&
y &&
puede ser lógico AND
, cuando el &
o &&
izquierda y derecha resultado de la expresión es verdad todo, todo el resultado de la operación puede ser verdad.
cuando &
y &&
tan lógico AND
, hay una diferencia:
cuando el uso &&
tan lógico AND
, si el resultado de la expresión es falsa izquierda, la expresión de la derecha no se ejecutará.
Tomemos el ejemplo:
String str = null;
if(str!=null && !str.equals("")){ // the right expression will not execute
}
Si se utiliza &
:
String str = null;
if(str!=null & !str.equals("")){ // the right expression will execute, and throw the NullPointerException
}
Un 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 utilizar como bit a bit AND
operador, &&
no puede.
El AND bit a bit "&" operador produce 1 si y sólo si tanto de los bits en sus operandos son 1. Sin embargo, si tanto de los bits son 0 o ambos de los bits son diferentes, entonces este operador produce 0. Para ser más preciso a nivel de bit y "&" devuelve 1 operador si alguno de los dos bits es 1 y devuelve 0 si cualquiera de los bits es 0.
Desde la página wiki:
http://www.roseindia.net/java/master-java/java-bitwise-and.shtml
duplicado posible de [¿Por qué suelen utilizar \ '|| \' 'no \ |? \ ', ¿Cuál es la diferencia] (http://stackoverflow.com/questions/7101992/why-do -we-usually-use-not-what-is-the-difference) –
Doble atajo de acceso directo si es posible. –