if条件中的编译错误

时间:2012-10-02 23:57:01

标签: java compiler-errors conditional-statements

在最后一个条件下,我期望从运算符“&&”左侧的表达式开始评估条件。这变为真实,然后在右边的声明 。但是,我在这里收到编译错误,说“令牌上的语法错误”=“,!= expected”。 对这个问题的任何解释都会有很大的帮助。

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");

编辑:感谢您的回答。为了检查它是否是operatar优先级问题,我在for循环和YES中运行相同的情况,就是这样。

    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;
    }

5 个答案:

答案 0 :(得分:5)

编译器正在尝试评估最后的if,就好像它已写入

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

这没有任何意义,因为左侧不是左值(从C借用一些词汇)。这是因为&&的优先级高于Java中的=

答案 1 :(得分:3)

我从你的代码中假设你正在试图玩,并且实际上想要将boolTrue分配给assignBool。

问题在于运营商的顺序。和&&优先级高于=(source)。它通过十个== 10表达式来创建一个bool。结果是非左值(无法写入的表达式)。你的表达式等同于完全括号:

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

正如您已经发现的那样,以下是这样做的方法:

ten==10 && (assignBool=boolTrue)

答案 2 :(得分:3)

从Java教程中的nice table可以看出,赋值运算符在所有运算符中的优先级最低。也就是表达式

ten==10 && assignBool=boolTrue

评估为

(ten==10 && assignBool) = boolTrue

但左手表情不可分配。

如果你想要不同的优先权,你必须使用括号,即

ten==10 && (assignBool = boolTrue)

答案 3 :(得分:2)

我不知道java但它可能是绑定&&比你的其他运营商更强烈。

答案 4 :(得分:1)

它被评估为if((ten==10 && assignBool)=boolTrue ),这意味着您正在尝试分配一个常量。