Побитови оператори (&, XOR, <<, ...) - 1

„Здрасти, Амиго!“

„Още един малък урок за побитовите оператори.“

„Знаете, че в допълнение към логическите оператори И (&&), ИЛИ (||) и НЕ (!), има и побитови оператори И (&), ИЛИ (|), НЕ (~) и XOR(^ ), нали?"

"Да. Билаабо даде много добър урок по този въпрос."

„Ами относно тези оператори. Имам да ви кажа две неща:“

„Първо, с изключение на NOT (~), те могат да се прилагат към булеви променливи, точно като логически оператори.“

„Второ, мързеливата оценка не се отнася за тях.“

"Вижте този пример:"

Код Еквивалентен code
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());
  }
 }
}

„Лявата страна по-компактна ли е от дясната?“

— Да.

— И има ли същото meaning?

— Да.

„Съвсем правилно. Но сега вижте същия израз, използващ побитови оператори :“

Код Еквивалентен code
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());
 }
 }
}

„С други думи, codeът е същият, но абсолютно всяка операция ще бъде изпълнена.

"Имайте предвид, че ако a е null, ще бъде хвърлено изключение при изчисляване на c2!"

"Ах. Сега виждам това по-ясно."