如果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");
}
}
为什么打印错误?
答案 0 :(得分:188)
表达式不会按您的想法解析。它不是
(test1=false) || (test1 == false)
在这种情况下,结果将是true
,但
test1 = (false || test1 == false)
首先计算false || test1 == false
表达式的值,它是false
,因为test1
设置为true
进入计算。
以这种方式解析它的原因是||
的{{3}}低于==
运算符的precedence,但高于赋值运算符{{1}的优先级}}
答案 1 :(得分:83)
基本上这是一个优先问题。您假设您的代码等同于:
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以获取有用的运算符优先级表。
答案 2 :(得分:2)
表达式test1 = false || test1 == false
将在以下步骤中进行评估。
STEP:1 - test1 = false || test1 == false
// ==
的优先级最高
STEP:2 - test1 = false || false
//运算符||
具有更高的优先级
STEP:3 - test1 = false
STEP:4 - false
由于表达式的布尔值变为false,因此正在执行else语句。
答案 3 :(得分:-11)
(test1 = false || test1 == false)
返回false,因为它们都是假的。(test1 = false || test1 == true)
这是真的,因为其中一个是真的