3

最後の条件で、演算子「&&」の左側の式から始まり、右側のステートメントが true になる条件が評価されることを期待していました。ただし、ここで「トークン "="、!= の構文エラーが予想されます" というコンパイル エラーが発生します。この問題に関する説明は非常に役立ちます。

boolean boolTrue=Boolean.TRUE;
    boolean assignBool=Boolean.FALSE;
    int ten=10;

    //eventually evaluates to true , runs okay
    if(assignBool=boolTrue){
        System.out.println("Executed");
    }
    //evaluates to true && true: runs correctly
    if( assignBool=boolTrue && ten==10 )
        System.out.println("Executed");

    //evaluates to true && true : runs correctly
    if( ten==10 && (assignBool=boolTrue)  )
        System.out.println("Executed");

    /*was supposed to evaluate to true && true : but gives compile error
    compiler expects me to use '!=' or '==' operator though the second statement ultimately evaluates to true 
    as in above case*/
    if( ten==10 && assignBool=boolTrue  )//Compile error
        System.out.println("Executed");

編集:答えてくれてありがとう。それがオペラターの優先順位の問題であるかどうかを確認するために、 for ループで同じケースを実行し、はい、それでした。

    boolean boolTrue=Boolean.TRUE;
    boolean assignBool=Boolean.TRUE;
    int ten=10;

    singleloop:
    for(int i=0;((ten==10 && assignBool)==boolTrue);System.out.println("Executed")){
        i++;
        if(i>10)
            break singleloop;
    }
4

5 に答える 5

5

コンパイラは、if書かれたかのように最後を評価しようとしています

if( (ten==10 && assignBool)=boolTrue  )

左辺は左辺値ではないため、これは意味がありません (C からいくつかの語彙を借りるため)。これは、Java&&よりも優先順位が高いためです。=

于 2012-10-02T23:58:27.027 に答える
3

Java チュートリアルのナイス テーブルからわかるように、代入演算子はすべての演算子の中で最も優先順位が低くなります。つまり、式

ten==10 && assignBool=boolTrue

として評価される

(ten==10 && assignBool) = boolTrue

ただし、左手の式は代入できません。

別の優先順位が必要な場合は、括弧を使用する必要があります。

ten==10 && (assignBool = boolTrue)
于 2012-10-03T00:05:03.203 に答える
3

あなたのコードから、あなたは遊んでいて、実際にboolTrueをassignBoolに割り当てたいと思います。

問題は演算子の順序です。&& は = ( source )よりも優先されます。これは、ten==10 式との論理積によって bool を作成しています。結果は非左辺値 (書き込みできない式) です。あなたの式は、完全に括弧で囲まれたものと同等です:

((ten == 10) && assignBool) = boolTrue

すでにわかっているように、次の方法でそれを行うことができます。

ten==10 && (assignBool=boolTrue)
于 2012-10-02T23:59:16.613 に答える
2

私はJavaを知りませんが、おそらく&&を他の演算子よりも強くバインドしています。

于 2012-10-02T23:59:44.760 に答える
1

これif((ten==10 && assignBool)=boolTrue )は、定数に代入しようとしていることを意味します。

于 2012-10-03T00:00:00.747 に答える