=和== If语句中的差异Java

时间:2016-03-01 10:47:52

标签: java if-statement

我在这里遇到一些奇怪的事情。如果我遗失了什么,请帮助我理解。我的if条件应该是:

if(configuredPdf == true)

但是我写错了:

if(configuredPdf = true)

我的Eclipse编译器没有要求我纠正它。然后我假设没有编译时间或检查异常。所以:

(configuredPdf = true)

返回一个布尔值?

5 个答案:

答案 0 :(得分:12)

是的,configuredPdf = true会为您的变量指定true并返回true。因此,if (configuredPdf = true)是一种有效的语法,即使它通常是一个错误。

使用if (configuredPdf)来避免这种拼写错误更安全。

答案 1 :(得分:8)

赋值是一个表达式,它返回您指定的值。例如a = b = true会将true分配给ab

添加boolean类型的原因是为了避免这种错误。以C为例,你可以写

if (a = 1)

任何非负面的都是真的。

虽然您仍然可以使用布尔类型出错,而不是写

if (a == true)
if (b == false)

你可以写

if (a)
if (!b)

更常见的例子是

for(String line; ((line = br.readLine()) != null;) {
    // process the line.
}

答案 2 :(得分:5)

赋值表达式的结果始终是分配的值,包括分配给布尔值时的值。这由JLS§15.26

涵盖
  

在运行时,赋值表达式的结果是赋值发生后变量的值。

是的,configuredPdf = truetrue分配给configuredPdf,该表达式的结果为true

同样,x = y = 5;5分配给yy = 5的结果为5,然后将其分配给x

从根本上说,你想要的是:

if (configuredPdf)

从来没有必要将布尔变量与truefalse进行比较,只需使用if (theVariable)(与true进行比较)或{{ 1}}(用于与if (!theVariable)进行比较)。养成这种习惯可以保护你免于意外分配。

实际比较布尔值的唯一时间是有用的是当它们两个变量时,例如falseif (thisFlag == thatFlag))。

为避免在这种情况下意外分配,请:

  1. 使用检查此内容的linter

  2. " double bang"第一面旗帜:

    if (thisFlag != thatFlag

    ...虽然正如您所指出的那样,如果您不小心输入if (!!thisFlag == thatFlag) 而不是=,可能您可能会意外地输入==而不是!: - )< / p>

  3. 使用旧的C语言(这是我使用的):

    !!

答案 3 :(得分:1)

当编译器进入代码中的if条件时,它会将'configuredpdf'指定为true。因此条件

    if(configuredpdf = true)

变为true并且循环执行成功。但是,当我们不希望这个循环成立时,问题就出现了。那时,对于给定的输入,编译器解析if条件,它强制变为true,并且即使输入的数据不一致,也执行条件执行时写入的代码。这就是为什么你会发现你的代码在if条件下有错误。

答案 4 :(得分:0)

configuredPdf必须是if(configuredPdf = true)编译的布尔值。

configuredPdf = true会将true分配给configuredPdf,因此if会成功。