4

Java での演算子の優先順位に関して何が正しいのか、私は混乱しています。AND は OR よりも優先度が高いというチュートリアルをずっと前に読みました。これは、質問で提供された回答によって確認されます。しかし、私は現在、「Sun Certified Programmer for Java 6 Study Guide」を使用して Java を勉強しています。この本には、次の例が含まれています。

int y = 5;
int x = 2;
if ((x > 3) && (y < 2) | doStuff()) {
    System.out.println("true");
}

コンパイラが上記のコードを処理する方法の説明をコピーして引用しています。

If (x > 3)is true、またはis(y < 2)の結果の いずれか、次に print 。短絡のため、式は の周りに括弧があるかのように評価されます。つまり、 の前の単一の式と の後の単一の式として評価されます。doStuff()true"true"&&(y < 2) | doStuff()&&&&

これは、|よりも優先順位が高いことを意味します&&。それは、短絡ORの代わりに「非短絡OR」を使用したためですか?何が本当?

4

2 に答える 2

8

これは、優先度の高い、|の代わりに演算子を使用しているためです。これが表です。||

代わりに演算子を使用すると、||思いどおりに動作します。

于 2012-12-27T17:28:46.177 に答える
0

短絡 && のため、式は (y < 2) | の周りに括弧があるかのように評価されます。doStuff() ...

このステートメントは正しくなく、まったく意味がありません。&& が短絡演算子であるという事実は、(y < 2) | の評価とは何の関係もありません。実際、doStuff() がブール値を返した場合にのみコンパイルできます。違い (暗黙の括弧) を作るのは、| に対する &&の優先順位です。これは、JLS ##15.22-23 で && が低いと定義されています。

于 2012-12-28T09:13:59.000 に答える