argius note

プログラミング関連

論理演算と短絡評価

たまたま、こんなコードを見かけた。

// s1 = "aa", s2 = "bb"
if (s1.equals("aa") & s2.equals("bb")) {
    //              ↑ここがポイント
}

これってありなの? しばし困惑。ありという前提なら、理解はできる。ただ、この場合は短絡評価を行うのが定石(だよね?)なので、今まで遭遇することすらなかったのである。
下記のリンク先にもあるけど、短絡評価かどうかは正しく認識しておかなければならない。

String s = null;
if (s != null && s.equals("")); // 右辺は評価されずOK
if (s != null &  s.equals("")); // 右辺が評価されNullPointerException

"&","|","^"は、数値の場合はビット演算を行うが、booleanの場合は論理演算を行う。それほど役に立つわけではないが、次のような式も成り立つ。私は今まで、排他的論理和(XOR)は2番目しか使えないものと思っていた。

if (true ^ false);
if (true != false);

参考