为什么带有赋值和等式检查的if语句的计算结果为false?

时间:2015-04-16 09:20:41

标签: java if-statement logic

如果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");
    }       
}

为什么打印错误?

4 个答案:

答案 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)

please have a look over precedence of operators

表达式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)这是真的,因为其中一个是真的