Javaの論理演算子の実行されかた

id:Yoshioripython でラムダでワンライナーを書くには、


python のラムダは1個の式しか実行できない
・1個の式しか実行できないので、andで式をつなげてワンライナーのように見せかける
・and のオペランドの各式がtrueになるように式の実行結果を配列とする(pythonの要素が1個以上の配列はtrueとして扱われる)


(pythonは詳しくないので間違ってたらごめんなさい)


という話をしていて、「ふーん。これorでできないかなぁ。でも、途中でtrueになったら処理が止まるか」などと思った。
で、python には関係ないんだけど、Java には「|」があることに気がついた。


マニアックすぎてビット演算以外に誰も使わない演算子だと思うけど、

public class TestOr {
    public static void main(String... argv) {
        if (returnTrueAndPrint() | returnTrueAndPrint()) {
           
        }
        
    }

    private static boolean returnTrueAndPrint() {
        System.out.println("true");
        return true;
    }

}

の実行結果は

true
true

と2行出力される。


これは「|」演算子が左オペランドがtrueになっても右オペランドを実行するため。


当然「||」演算子にすると、trueが1行だけしか表示されない。左オペランドがtrueのときに、orなので右オペランドが実行されないから。