我想了解int x如何在每个循环迭代的if(布尔表达式)内递增 怎么可能?它是如何工作的?
public class MethodsTest {
public static void main(String[] args) {
int x= 0;
for (int z = 0; z < 5; z++)
{
if(x++ > 2){
}
System.out.println(x);
}
}
}
输出将为
1
2
3
4
5
答案 0 :(得分:6)
x++
是一个复合赋值运算符,相当于x = x + 1
,在评估后发生的副作用。因此,if
语句相当于一对这样的语句:
if(x > 2) {
x = x + 1;
// At this point, the side effect has taken place, so x is greater than it was before the "if"
...
} else {
// The side effect takes place regardless of the condition, hence the "else"
x = x + 1;
}
请注意,此代码被强制重复x = x + 1
部分。使用++
可以避免重复。
x++
有一个预增量对应物,即++x
。在这种形式中,赋值在评估表达式之前发生,因此条件变为
if ((x = x + 1) > 2) {
// Note that the condition above uses an assignment. An assignment is also an expression, with the result equal to
// the value assigned to the variable. Like all expressions, it can participate in a condition.
}
答案 1 :(得分:0)
为了打破你的概念if
的条件不能“做事”,想象你有一个返回布尔值的函数,如:
boolean areThereCookies(int numCookies)
{
return numCookies > 0;
}
然后您可以在if
声明中使用它:
if (areThereCookies(cookies))
{
eatCookies(cookies);
}
然而,我们要求评估areThereCookies(int)
条件的方法if
可以在世界上制造任何东西。它可以改变变量值,读取输入,写入输出,窃取cookie ......
因此语言完全能够在if评估中“做事”。其他答案解释了您的代码具体做了什么。
干杯。
答案 2 :(得分:0)
只要表达式解析为布尔值,就可以在if语句中包含表达式。例如,
int i = 0
if (i = i + 1)
不是if语句中的有效表达式,因为表达式解析为1,这是一个整数。 然而,
int i = 0
if (2 == i = 2)
是一个有效的表达式,因为2首先被赋值给变量i,然后被比较为2,因此表达式解析为“true”。 在示例if语句中,您有一个后递增变量x,它与2与大于运算符进行比较,得到一个布尔值,因此它是一个有效的表达式。 Hotlinks描述了评论中增加后变量的内容。