在if语句中改变布尔值?

时间:2014-06-28 22:31:45

标签: java boolean conditional

我正在攻读OCA Java SE7助理考试。我的一个练习题考试有以下代码片段:

boolean flag = true;
if (flag = false) {
    System.out.println("1");
}
else if (flag) {
    System.out.println("2");
}
else if (!flag) {
    System.out.println("3");
}
else
    System.out.println("4");

注意if (flag = false)有条件的。问题是这个片段的输出是什么。所有的数字都作为答案选择提供,然后有一个选项说#编译错误,"这是我选择的。我错了。输出将是3.我在Eclipse中进行了测试,并且还返回了3。

然后我用

进行了测试
int x = 3;
int y = 1;
if (x = y) {
   // whatever
}

,当然,出现了错误。

为什么flag内的true可以从false更改为if-statement,但x的值在类似的情况下无法更改?是因为flag是布尔类型而x是类型int吗?我用Google搜索,但无法找到任何东西。

4 个答案:

答案 0 :(得分:7)

因为x = y的分配并不等同于boolean评估。

if希望操作结果能够提供truefalse返回。

if ((x = y) == y)这样的东西会起作用(评估会返回true

答案 1 :(得分:0)

flag = false是一个赋值,因此它被执行。在第一个if上赋值之后,它的计算结果为false,因为它只是设置为它。为了相等,它应该是flag == false,但由于它是一个赋值,top if被评估为false,并且因为它被改为false,当你到达!标志时,因为flag不再为真,所以它打印3。

if(x = y)出错,因为在赋值之后,该值无法作为布尔结果求值,而if(flag = false)在赋值后可以求值为布尔值。

要记住高级语言的重要一点是,它需要多个低级语句来执行即使是简单的if的逻辑,并且在赋值情况下,至少有2个操作正在进行,首先是作业,然后是平等。

答案 2 :(得分:0)

if (flag = false)会将flag变量设为false,然后检查if(flag)

您建议执行if(x = 1),可以将x设置为1,但if(x)无效。

答案 3 :(得分:0)

它将打印3,因为布尔变量已分配false(并检查为true),然后检查为false,最后检查!false true