在if语句中改变布尔值?

Mon*_*ica 3 java conditional boolean

我正在攻读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");
Run Code Online (Sandbox Code Playgroud)

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

然后我测试了

int x = 3;
int y = 1;
if (x = y) {
   // whatever
}
Run Code Online (Sandbox Code Playgroud)

当然,有一个错误.

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

Mad*_*mer 7

因为赋值x = y不等于boolean评价.

if期望操作的结果给出truefalse返回.

if ((x = y) == y)工作一样(评估会返回true)

  • @NojoRu没有它是非常糟糕的练习,人们阅读(可能打字)它会认为它是`==`.事实上,许多静态分析器(如FindBugs)会将此标记为错误. (2认同)