2016-02-14 61 views
3

我明白,有关StackOverflow上的这个主题的问题很多。但是我仍然有些困惑,不确定何时使用这些操作。我正在通过旧考试来学习考试。其中一种方法可以返回有障碍的教室数量并且可用。我写了计数器方法,但不知道是否应该预先递增或递增计数器。我很困惑它是如何与方法中的return语句一起工作的。我仍然没有得到该方法将返回下面的价值。其他问题没有在方法中显示返回值,因此我很困惑它实际上是如何工作的。下面是代码:何时使用后增量和前增量在Java

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

回答

5

当您希望使用该表达式中变量的增量值时,使用PRE增量,而POST增量在增加该值之前使用原始值。

每当您的代码遇到PRE增量时,它会增加该变量在内存中的值,然后加载该值并继续读取表达式。

POST增量做的相反,它将该变量的值加载到内存中,然后递增该值并继续读取表达式。

为了使它更清楚,考虑这个

int i = counter++; 

相当于

int i = counter; 
counter = counter + 1; 

鉴于

int i = ++counter; 

相当于

counter = counter + 1; 
int i = counter; 

编辑:我的StackOverflow评论arent工作,所以我只是在这里编辑它。

我在说什么,它只在表达式中使用该值时才起作用。

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 
+0

所以你在说,当我们将递增的变量赋值给另一个变量时,它才会真正起作用。 – user1454994

+0

我希望可以把它复制到我的笔记中以帮助我记住。 – user1454994

3

在您的例子没关系,因为你什么都不做与++counter返回的值。

只有当您使用post/pre-increment操作符返回的值时,才会有所不同。

举例来说,如果你有一个return counter++;return ++counter;声明,你的方法会根据您使用哪个运营商在返回不同的结果。

+0

但是让我们假设,我们将使用该方法的其他地方返回的值。 – user1454994

+1

@ user1454994没关系。 '++ counter'和'counter ++'递增'counter'。由于你的方法返回'counter',所以你使用了两个操作符中的哪一个并不重要。 – Eran

+0

只是为了澄清,如果我们将此方法的值赋给另一个变量,例如在驱动程序类中,并且我们想要打印可用的类的数量,那么这不会有什么区别?变量将被分配计数器的值? – user1454994