"&"と"&&"と"and"をもう一度。

未了だった「"&"と"&&"と"and"。」を再考してみます。実はif文を覚えた直後にもちょっと書き直してみたのですが、こんなコンパイル・エラーになって、解決できずにいました。

E:\study\02>javac testAndOr.java
testAndOr.java:5: ここで 'void' 型を使用することはできません。
        if (false & System.out.print("false & print\n")) {}
            ^

「なんでfalseが'void' 型なんだろう」と悩んだのですが、違いますね。System.out.printメソッドがvoid型で、'&'でつないでいるからその前にマークが行ってしまっているわけです。
修正したコードと実行結果はこんな感じ。

public class testAndOr {
  public static void main(String[] args) {
    boolPrint("[and]\n");
    if (false & boolPrint("false & print\n")) {}
    if (false && boolPrint("false && print\n")) {}
    boolPrint("[or]\n");
    if (true | boolPrint("true | print\n")) {}
    if (true || boolPrint("true || print\n")) {}
  }
  static boolean boolPrint (String s) {
    System.out.printf(s);
    return true;
  }
}
E:\study\02>javac testAndOr.java
E:\study\02>java testAndOr
[and]
false & print
[or]
true | print

「false && 出力文」や「true || 出力文」では、予想通り、出力文は実行されていないようです。