问题

当Javaif语句具有赋值和相等性检查OR-d时,它是如何工作的?

public static void test() {
    boolean test1 = true; 
    if (test1 = false || test1 == false) {
        System.out.println("TRUE");
    } else {
        System.out.println("FALSE");
    }       
}

为什么打印错误?


#1 热门回答(186 赞)

表达式不会按你的思路解析。不是

(test1=false) || (test1 == false)

在这种情况下,结果将是true,但是

test1 = (false || test1 == false)

首先计算false || test1 == false表达式的值,它是false,因为test1设置为true进入计算。

以这种方式解析的原因是,||precedence低于==操作符的precedence,但高于赋值运算符=的优先级。


#2 热门回答(82 赞)

这基本上是一个优先问题。你假设你的代码相当于:

if ((test1 = false) || (test1 == false))

......但事实并非如此。它实际上相当于:

if (test1 = (false || test1 == false))

......相当于:

if (test1 = (false || false))

(因为test1istrue开头)

......相当于:

if (test1 = false)

它赋值为falsetotest1,表达式为false

有关运算符优先级的有用表,请参见Java tutorial on operators


#3 热门回答(2 赞)

please have a look over precedence of operators

Expressiontest1 = false || test1 == false将在以下步骤中进行评估。

STEP:1-test1 = false || test1 == false //优先级==最高

STEP:2-test1 = false || false // Operator||具有更高的优先级

STEP:3-test1 = false

STEP:4-false

由于表达式的布尔值变为false,因此正在执行else语句。


原文链接