当我写一个像这样的while循环时,我在eclipse中使用Java时已经被无数次搞砸了:
while (recsFinished = true)
实际上我想要
while (recsFinished == true)
这是一个非常简单的错误,但它发生在我身上很多,它完全抛弃了程序。它之所以这样做是因为当我编写赋值而不是等式时,Eclipse甚至不会发出警告。这让我相信存在一个带有赋值方程的while循环的原因,但为什么呢?我想不到一次使用!
答案 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
并且赋值是表达式,
有12个赋值运算符;所有这些都是语法上的右关联(他们从右到左分组)。因此,a = b = c表示a =(b = c),它将c的值赋给b,然后将b的值赋给a。
AssignmentExpression: ConditionalExpression Assignment