为什么这个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 == false
expression式是首先计算的,它是false
,因为test1
设置为true
进入计算。
这样parsing的原因是||
的优先级 低于==
运算符的值,但高于赋值运算符=
的优先级。
基本上这是一个优先问题。 你假设你的代码等同于:
if ((test1 = false) || (test1 == false))
…但事实并非如此。 它实际上相当于:
if (test1 = (false || test1 == false))
…相当于:
if (test1 = (false || false))
(因为test1
是true
开始)
…相当于:
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)
这是真实的,因为其中一个是真的