当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");
}
}
为什么打印结果是错误的?
发布于 2015-04-16 17:26:16
表达式不是按照您所想的方式进行解析的。不是这样的
(test1=false) || (test1 == false)
在这种情况下,结果应该是true
,但是
test1 = (false || test1 == false)
首先计算false || test1 == false
表达式的值,该值为false
,因为在计算过程中将test1
设置为true
。
这样解析它的原因是||
的precedence低于==
运算符,但高于赋值运算符=
的优先级。
发布于 2015-04-16 17:28:34
基本上,这是一个优先级问题。你假设你的代码等同于:
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。
发布于 2015-04-18 16:41:30
(test1 = false || test1 == false)
返回false,因为它们都是false。(test1 = false || test1 == true)
这是真,因为它们中有一个是真的
https://stackoverflow.com/questions/29670421
复制相似问题