为什么这个if语句,赋值和相等检查,评估为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"); } } 

为什么这个打印FALSE?

expression式不像你想象的那样被parsing。 不是

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

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

 test1 = (false || test1 == false) 

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

这样parsing的原因是||的优先级 低于==运算符的值,但高于赋值运算符=的优先级。

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

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

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

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

…相当于:

 if (test1 = (false || false)) 

(因为test1true开始)

…相当于:

 if (test1 = false) 

将值为false的值赋给test1 ,expression式的结果为false

有关运算符优先级的有用表,请参阅运算符的Java教程 。

请看看运营商的优先级

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

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

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

STEP:3- test1 = false

步骤:4- false

由于expression式的布尔值变为false,所以其他语句正在执行。

(test1 = false || test1 == false)返回false,因为它们都是假的。 (test1 = false || test1 == true)这是真实的,因为其中一个是真的