Operadores bit a bit (&, XOR, <<, ...) - 1

"¡Hola, amigo!"

"Una pequeña lección más sobre operadores bit a bit".

"Usted sabe que además de los operadores lógicos AND (&&), OR (||) y NOT (!), también hay operadores bit a bit AND (&), OR (|), NOT (~) y XOR(^ ), ¿bien?"

"Sí. Bilaabo una vez dio una muy buena lección sobre esto".

"Bueno, sobre estos operadores. Tengo dos cosas que decirte:"

"Primero, a excepción de NOT (~), se pueden aplicar a variables booleanas, al igual que los operadores lógicos".

"En segundo lugar, la evaluación perezosa no se aplica a ellos".

"Mira este ejemplo:"

Código Código equivalente
if (a != null && a.getName() != null && c != null)
{
 c.setName(a.getName());
}
if (a != null)
{
 if (a.getName() != null)
 {
  if (c != null)
  {
   c.setName(a.getName());
  }
 }
}

"¿El lado izquierdo es más compacto que el derecho?"

"Sí."

"¿Y tiene el mismo significado?"

"Sí."

"Muy bien. Pero ahora mire la misma expresión usando operadores bit a bit :"

Código Código equivalente
if (a != null & a.getName() != null & c != null)
{
 c.setName(a.getName());
}
boolean c1 = (a != null);
boolean c2 = (a.getName() != null);
boolean c3 = (c != null);
if (c1)
{
 if (c2)
 {
  if (c3)
  {
   c.setName(a.getName());
 }
 }
}

"En otras palabras, el código es el mismo, pero se realizarán absolutamente todas las operaciones".

"¡Tenga en cuenta que si a es nulo, se lanzará una excepción al calcular c2!"

"Ah. Puedo ver eso más claramente ahora".