按位運算符(&、XOR、<<、...)- 1

“嗨,阿米戈!”

“再上一節關於按位運算符的小課。”

“你知道,除了邏輯運算符AND(&&)、OR(||)和NOT(!)之外,還有按位運算符AND(&)、OR(|)、NOT(~)、XOR(^ ), 正確的?”

“是的。Bilaabo 曾經就此給過很好的教訓。”

“嗯,關於這些操作員。我有兩件事要告訴你:”

“首先,除了 NOT (~),它們可以應用於布爾變量,就像邏輯運算符一樣。”

“其次,惰性評價不適用於他們。”

“看這個例子:”

代碼 等效代碼
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());
  }
 }
}

“左邊比右邊緊湊嗎?”

“是的。”

“它的意思是一樣的嗎?”

“是的。”

“非常正確。但現在使用按位運算符查看相同的表達式:”

代碼 等效代碼
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());
 }
 }
}

“換句話說,代碼是一樣的,但絕對會執行每一個操作。”

“注意,如果a為null,計算c2時會拋出異常!”

“啊,我現在看得更清楚了。”