是否有任何理由让Eclipse在while循环中显示赋值变量为有效?

时间:2014-08-08 14:25:06

标签: java eclipse

当我写一个像这样的while循环时,我在eclipse中使用Java时已经被无数次搞砸了:

while (recsFinished = true)

实际上我想要

while (recsFinished == true)

这是一个非常简单的错误,但它发生在我身上很多,它完全抛弃了程序。它之所以这样做是因为当我编写赋值而不是等式时,Eclipse甚至不会发出警告。这让我相信存在一个带有赋值方程的while循环的原因,但为什么呢?我想不到一次使用!

5 个答案:

答案 0 :(得分:6)

此类作业在C和C ++中很受欢迎(特别是在if个语句中)并且也发现它们也是Java的一部分。

有些人将文字放在左侧:while (true == recsFinished)而我倾向于建议您采用这种编程风格,只是因为我个人认为它是混淆的。如果偶然使用=,这将发出编译器错误。

请注意,与true的比较是多余的。完全放弃并改为使用while (recsFinished)

答案 1 :(得分:4)

它编译,因为它是有效的Java语法。

相当于:

recsFinished = true;
while (recsFinished) {
    ....
    recsFinished = true;
}

相当于

recsFinished = true;
while (true) {
    ....
    recsFinished = true;
}

会给你一个无限循环。

答案 2 :(得分:1)

完全有可能在循环中设置表达式中的值。如果你这样做,你的表达式将被评估,因为你每次进行循环都会将它重置为true。

答案 3 :(得分:0)

在大多数编程语言中,运算符=在调用后返回指定的值。 whcih表示如果你想在每次迭代中分配一个变量并且该变量的值是条件,那么你将在循环条件中使用=而不是==

示例

boolean a, b;
b = true;
while(a = b){
    // Some crazy things using a & b
    // loop ends when b == false at the end of an iteration
}

答案 4 :(得分:0)

回答你的问题;这是有效的,因为规范是这样说的。

您可以使用表达式

调用方法
  

15.12. Method Invocation Expressions

     

方法调用表达式用于调用类或实例方法。

MethodInvocation:
   MethodName ( ArgumentList opt )

ArgumentList:
   Expression
   ArgumentList , Expression

并且赋值是表达式,

  

15.26. Assignment Operators

     

有12个赋值运算符;所有这些都是语法上的右关联(他们从右到左分组)。因此,a = b = c表示a =(b = c),它将c的值赋给b,然后将b的值赋给a。

AssignmentExpression:
   ConditionalExpression
   Assignment