--i和i--的行为与++ i和i ++的行为方式相同吗?

时间:2014-05-05 11:17:09

标签: java loops for-loop stack

我最近查了一下++ i和i ++之间的区别是什么,发现它显然在for循环中无关紧要但在这种情况下确实如此:

int i = 3;
int a = i++; // a = 3, i = 4
int b = ++a; // b = 4, a = 4

对于--i和i--它是否有效?我很想知道,因为我遇到了以下练习:

// pops the first non-null element in a stack
public E popFirstNonNull() throws EmptyStackException {

while ( (top >= 0) && ( S[top] == null ) ) {
    top--;
}
if ( top >= 0 ) {
    E topNonNull = S[top];
    S[top--] = null; //for garbage collection
    return topNonNull;
}
else {
    throw new EmptyStackException();
}

}

如果++i / i++--i / i--行为相同,则不应将此行:S[top--]=null; 更改为:S[--top]=null

4 个答案:

答案 0 :(得分:4)

没有

代码的作用是

  • 记住topNonNull
  • 中的顶部元素
  • 将顶部元素归零然后
  • 减少顶部 - "指针"在S[top--]=null
  • return topNonNull

如果将其更改为S[--top]=null,那么您将取消其他元素,这不是您想要的。

答案 1 :(得分:1)

++ i / i ++和--i / i--的行为方式相同。你的正确影响(top--和--top)在你的情况下是不同的

 S[top--] = null; //null will be assigned to current index() and than it will decrease top.  

S[--top] = null; // it will decrease top and null will be assigned to decreased top.

答案 2 :(得分:1)

是的,他们的行为相同。

关于示例:不,不应该更改。

的含义
S[top--] = null

是用null替换刚刚读取的值。 所以:

E topNonNull = S[top];
S[top--] = null; //for garbage collection

首先读取s [top]并将其赋值给topNonNull,然后将刚刚读取的值替换为null,因此top必须保持不变,然后可以将其减少为指向下一个非null值。

答案 3 :(得分:0)

是的, - i表示i = i - 1在计算之前和i--在计算之后。所以它类似于++ i和i ++。