Diferencia entre & y && en Java?

Posibles duplicados:
Cuál es la diferencia entre | y || en Java?
Diferencia en & y &&

Me preguntaba ¿cuál es la diferencia entre & y && ?
Unos días escribí una condición para una statement if que parecía algo así como:

 if(x  0) 

Sin embargo, cambié el && a simplemente & y no mostró errores. ¿Cual es la diferencia?


Ejemplo: compilé este sencillo progtwig:

 package anddifferences; public class Main { public static void main(String[] args) { int x = 25; if(x  0) { System.out.println("OK"); } if(x  0) { System.out.println("Yup"); } } } 

Imprimió “OK” y “Yup”. Entonces, ¿importa cuál usar si ambos funcionan?

& es bitwise. && es lógico.

& evalúa ambos lados de la operación.
&& evalúa el lado izquierdo de la operación, si es true , continúa y evalúa el lado derecho.

& es un operador AND bit a bit que compara bits de cada operando.
Por ejemplo,

 int a = 4; int b = 7; System.out.println(a & b); // prints 4 //meaning in an 32 bit system // 00000000 00000000 00000000 00000100 // 00000000 00000000 00000000 00000111 // =================================== // 00000000 00000000 00000000 00000100 

&& es el operador AND lógico que compara valores booleanos de operandos solamente. Toma dos operandos que indican un valor booleano y realiza una evaluación diferida sobre ellos.

&& == lógico AND

& = en bitácora Y

‘&’ realiza ambas pruebas, mientras que ‘&&’ solo realiza la segunda prueba si la primera también es verdadera. Esto se conoce como cortocircuito y se puede considerar como una optimización. Esto es especialmente útil para proteger contra la nulidad (NullPointerException).

 if( x != null && x.equals("*BINGO*") { then do something with x... } 

&& es un operador lógico

y es un operador poco

Aparentemente si haces una comparación de cierto a verdadero, la respuesta es verdadera, y si haces una comparación de cierto y falso, ¡la respuesta es falsa!