Java 在if语句中更改布尔值?
我正在为OCA Java SE7联合考试学习。我的一个练习试题包含以下代码片段:Java 在if语句中更改布尔值?,java,boolean,conditional,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(
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
}
当然,还有一个错误
为什么
if语句
中的标志
可以从true
更改为false
,但在类似情况下x的值不能更改?是因为标志
是布尔类型,而x是类型int
?我在谷歌上搜索了这个,但什么也找不到 flag=false是一个赋值,因此它被执行。在对第一个if赋值之后,它的计算结果为false,因为它刚刚被设置为false。对于equality,它应该是flag==false,但由于它是一个赋值,top if的计算结果为false,并且由于它在到达时被更改为false!flag,由于flag不再为true而通过,它将打印3
if(x=y)出现错误,因为赋值后,该值不能作为布尔结果计算,而if(flag=false)可以在赋值后计算为布尔值
高级语言需要记住的一件大事是,即使是一个简单的if,也需要不止一个低级语句来执行逻辑,在赋值情况下,至少有两个操作在进行,首先是赋值,然后是等式。,因为
x=y
的赋值不等于布尔值
如果
希望操作结果给出true
或false
返回
类似于if((x=y)==y)
可以工作(计算将返回true
)if(flag=false)
将flag
变量设置为false,然后检查if(flag)
您建议执行if(x=1)
,它可以将x
设置为1,但是if(x)
无效。它将打印3
,因为布尔变量被赋值false
(并检查为true),然后检查为false,最后检查为!false
这是true
同样,这是一种好的做法吗?除了为这次考试学习之外,我从未见过它。@NojoRu不,这是一种非常糟糕的做法,人们阅读(可能还有打字)它会认为它是=
。事实上,许多静态分析器,如FindBugs,都会将此标记为错误。我希望您会说这是一个糟糕的做法。有点让我想知道为什么它会出现在考试上;仅仅因为它可以做到并不意味着它应该做到。@NojoRu它在考试中,因为它强调了犯这种错误是多么容易,并确保你正在阅读(和理解)代码。我经常看到它用于阅读输入,如在中((line=bufferedReader.readLine())!=null){…
。