在Java中何时使用后置递增和前置递增

6

我知道在StackOverflow上有很多关于这个主题的问题。但是我仍然感到有些困惑,不确定何时使用操作符。我正在复习我的考试,正在回顾以前的测试。其中一个方法返回无障碍设施可用的教室数量。我编写了计数器方法,但不确定应该预增还是后增计数器。我对方法中的返回语句是如何工作感到困惑。我仍然不明白下面的方法会返回什么值。其他问题没有在方法中显示返回值,因此我不清楚实际上它是如何工作的。以下是代码:

  public int howManyHandi()
{
    int counter= 0;
    for (int i = 0; i < _clsrms.length; i++){
        if (_clsrms[i].handicappedSuitable() && _clsrms[i].isAvailable()){
            ++counter;
        }
    }
    return counter;
}  
2个回答

14

在表达式中使用前缀递增运算符时,它会先对变量的值进行递增,然后再将此值用于计算表达式。而后缀递增运算符则是先使用变量原来的值来计算表达式,然后再将该值递增。

每当代码遇到前缀递增运算符时,它都会将变量的值加1并存储在内存中,然后加载该值并继续读取表达式。

后缀递增运算符则相反,它会先加载内存中的变量值,然后将其递增后再继续读取表达式。

为了更清晰地说明这一点,请考虑以下示例

int i = counter++;

等同于

int i = counter;
counter = counter + 1;

有鉴于

int i = ++counter;

等同于

counter = counter + 1;
int i = counter;

编辑:我的StackOverflow评论不起作用,所以我会在这里编辑。

我的意思是,只有在表达式中使用该值时才会起作用。

sum = 0
counter = 0;
sum = (++counter)+(++counter)+(counter++)

被评估为

sum = 0
counter = 0
//For first ++counter
counter = counter + 1
sum = counter

//For second ++counter
counter = counter + 1
sum = sum + counter

//For first counter++
sum = sum + counter
counter = counter + 1

那么你的意思是只有在将递增的变量赋值给另一个变量时才会真正产生差异? - user1454994
1
希望你不介意我把这个复制到我的笔记里,以便帮助我记住。 - user1454994

3

在你的例子中,不管怎样都没有关系,因为你没有使用++counter返回的值。

唯一需要注意的是当你正在使用后/前缀递增运算符返回的值时。

例如,如果你有一个return counter++;return ++counter;语句,你的方法将根据你使用哪个运算符而返回不同的结果。


但是让我们假设我们将在其他地方使用方法返回的值。 - user1454994
1
@user1454994 没关系。++countercounter++ 都会增加 counter 的值。由于你的方法返回 counter,所以使用哪个运算符都无所谓。 - Eran
只是为了澄清,如果我们将此方法的值分配给另一个变量,例如在驱动程序类中,并且我们想要打印可用类的数量,这不会有任何影响吗?变量将被分配计数器的值? - user1454994
1
@user1454994 如果你的意思是像 int count = something.howManyHandi(); 这样,那么无论你在 howManyHandi 中使用 counter++ 还是 ++counter 都没有关系。另一方面,如果你的代码中有 int variable = counter++; 或者 int variable = ++counter;,那么根据你使用的增量运算符,variable 的值将会不同。 - Eran

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接