如果布尔表达式增加int内部

时间:2014-01-04 02:38:35

标签: java

我想了解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

3 个答案:

答案 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描述了评论中增加后变量的内容。