我最近查了一下++ 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
答案 0 :(得分:4)
没有
代码的作用是
topNonNull
S[top--]=null
行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 ++。