Bitsel operatörler (&, XOR, <<, ...) - 1

"Merhaba, Amigo!"

"Bitsel operatörler hakkında bir küçük ders daha."

"AND (&&), OR (||) ve NOT (!) mantıksal işleçlerine ek olarak, ayrıca bitsel işleçler AND (&), OR (|), NOT (~) ve XOR(^) olduğunu biliyorsunuz. ), Sağ?"

"Evet. Bilaabo bir keresinde bu konuda çok iyi bir ders vermişti."

"Pekala, bu operatörler hakkında. Size söyleyeceğim iki şey var:"

"İlk olarak, NOT (~) dışında, mantıksal işleçler gibi boole değişkenlerine uygulanabilirler."

"İkincisi, tembel değerlendirme onlar için geçerli değil."

"Şu örneğe bakın:"

kod eşdeğer kod
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());
  }
 }
}

"Sol taraf sağdan daha mı kompakt?"

"Evet."

"Aynı anlamı mı taşıyor?"

"Evet."

"Oldukça doğru. Ama şimdi bitsel işleçler kullanan aynı ifadeye bakın :"

kod eşdeğer kod
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());
 }
 }
}

"Yani kod aynı ama kesinlikle her işlem yapılacak."

"a boşsa, c2 hesaplanırken bir istisna atılacağını unutmayın!"

"Ah. Bunu şimdi daha net görebiliyorum."