为什么这个带有赋值和相等性检查的 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))
(因为 test1
是 true
开头)
... 相当于:
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语句正在执行。
当 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))
(因为 test1
是 true
开头)
... 相当于:
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语句正在执行。