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

"Olá, amigo!"

"Mais uma pequena lição sobre operadores bit a bit."

"Você sabe que além dos operadores lógicos AND (&&), OR (||) e NOT (!), também existem operadores bit a bit AND (&), OR (|), NOT (~) e XOR(^ ), certo?"

"Sim. Bilaabo uma vez deu uma lição muito boa sobre isso."

"Bem, sobre esses operadores. Tenho duas coisas para lhe dizer:"

"Primeiro, exceto para NOT (~), eles podem ser aplicados a variáveis ​​booleanas, assim como operadores lógicos."

"Em segundo lugar, a avaliação preguiçosa não se aplica a eles."

"Veja este exemplo:"

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());
  }
 }
}

"O lado esquerdo é mais compacto que o direito?"

"Sim."

"E tem o mesmo significado?"

"Sim."

"Certo. Mas agora olhe para a mesma expressão 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());
 }
 }
}

"Em outras palavras, o código é o mesmo, mas absolutamente todas as operações serão executadas."

"Observe que se a for nulo, uma exceção será lançada ao calcular c2!"

"Ah. Eu posso ver isso mais claramente agora."