为什么这个带有赋值和相等性检查的 if 语句的计算结果为 false?

Why does this if statement, with an assignment and equality check, evaluate to false?

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

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

为什么这个打印是假的?

表达式未按照您的想法进行解析。这不是

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

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

test1 = (false || test1 == false)

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

之所以这样解析是因为||precedence==运算符的优先级低,但比赋值运算符=.

这基本上是一个优先级问题。您假设您的代码等同于:

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

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

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

... 相当于:

if (test1 = (false || false))

(因为 test1true 开头)

... 相当于:

if (test1 = false)

将值 false 赋值给 test1,表达式的结果为 false.

请参阅 Java tutorial on operators 以获得有用的 table 运算符优先级。

(test1 = false || test1 == false) returns 假,因为两者都是假的。(test1 = false || test1 == true) 这是真的,因为其中一个是真的

表达式 test1 = false || test1 == false 将在接下来的步骤中计算。

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

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

步骤:3- test1 = false

步骤:4- false

因为表达式的布尔值变为false.So else语句正在执行。