java 演算子の優先順位(&& と ||)

あるjavaのソースを見ながら調査をしているときのことでした。

下の結果がどうなるのか、理解してませんでした。

public class X {
    public static void main(String[] args) {
        System.out.println(" true || false && false -> " + (true || false && false));
    }
}

演算子 || と && の優先順位を同じだと思いこんでいたため、左の || から評価されたあと && が評価されて false になると思ったんですが、実際は違いました。

実行結果
true ||  false  && false  -> true

http://www.javaroad.jp/java_operator7.htm

優先順位 && は || より優先順位が高いのを知りました。常識の範囲なんでしょうかね?

まとめ

評価順序がわかるように、明示的に中カッコで囲む方が良いと思った。紛らわしいから、こんな順序に依存したコードは、書かないほうがいい。

2件のコメント

  • こんにちは。Google で検索してやってきました。
    Java に限らず、コンピューターの言語は昔からそうですよ。&& が積(論理積)、|| が和(論理和)なので、算術演算子の積(*)と和(+)の優先順位の優劣と同じにしてあるのだろうと思います。

  • unibonさん、コメントありがとうございます。
    > Java に限らず、コンピューターの言語は昔からそうですよ。
    そうなのですか。知らなかったです(汗
    「積(*)と和(+)」と同じと考えると確かに自然だし、すっきり理解できますね。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です


The reCAPTCHA verification period has expired. Please reload the page.

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください