我正在攻读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搜索,但无法找到任何东西。
答案 0 :(得分:7)
因为x = y
的分配并不等同于boolean
评估。
if
希望操作结果能够提供true
或false
返回。
像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
。