与 == 和 = 在 “if” 语句中混淆

2022-09-04 23:52:35

我知道我们不能在java的if语句中使用赋值运算符,就像我们在任何其他几种语言中使用的那样。

那是

            int a;

            if(a = 1) {  } 

将给出编译错误。

但是下面的代码工作正常,怎么样?

           boolean b;

           if(b = true) {   }

编辑:这是不能在if语句中使用赋值的规则的例外。


答案 1

因为赋值的“结果”是赋值...所以在第二种情况下它仍然是一个表达式。 表达式要求条件是表达式,该表达式由第二个表达式满足,但不由第一个表达式满足。实际上,您的两个代码段是:booleanifboolean

int a;

a = 1;
if (a) { }

boolean b;

b = true;
if (b) { }

从该扩展中是否可以清楚地看出,第二个版本将编译,但不是第一个版本?

这是不直接与真假进行比较的一个原因。所以我总是会写而不是和代替.诚然,当 和 是变量时,您仍然会遇到问题 - 那里的拼写错误可能会导致问题。我不能说它曾经发生在我身上。if (b)if (b == true)if (!b)if (b == false)if (b == cbcboolean

编辑:响应您的编辑 - 各种赋值都可以在语句中使用 - 和循环等,只要整体条件表达式是.例如,您可能具有:ifwhileboolean

String line;
while ((line = reader.readLine()) != null)
{
    // Do something with a line
}

虽然我通常避免在疾病中产生副作用,但这个特定的成语通常对上面显示的示例有用,或者使用.基本上,它是“虽然我读到的值很有用,但使用它。InputStream.read


答案 2

因为您需要一个计算结果为布尔值的表达式。 评估为布尔值,但计算为int,因为赋值始终计算到分配的值。ifb = truea = 1


推荐