我遇到了以下问题:
private void doStuff(int i) {
if(i>10) {
return;
}
doStuff(i++);
}
public void publicMethod() {
doStuff(i);
}
我希望这段代码会运行doStuff
10次,然后返回。
但是,在使用0
再次调用doStuff
之前,不会执行i++
。
结果是一个无限循环。我知道如何修复它,但我想知道这个行为是正确的还是错误的。
发布于 2012-10-12 13:26:46
现在,我希望这个函数运行doStuff 10次,然后返回,但是在doStuff被再次调用之前,i++不会被执行。
是的,后增量运算符的结果是原始值...然后在下一次调用该方法时,您就有了一个新的i
。换句话说,这个调用:
doStuff(i++);
等同于:
int original = i;
i = original + 1;
doStuff(original);
后缀增量表达式的值是存储新值之前的变量值。
既然你以后不再使用i
(因此它的任何副作用都是毫无意义的),为什么不简单地简化你的生活呢?
doStuff(i + 1);
(与Java语言中的所有参数一样,您看到的是按值传递-更改方法中i
的值不会更改调用方参数的值。)
发布于 2012-10-12 13:26:24
++
操作符的工作与预期不谋而合。它首先返回变量的值,然后增加变量,因此总是传递0。
这一点:
doStuff(i++);
是这样的:
int x = i;
i += 1;
doStuff(x);
发布于 2012-10-12 13:26:45
i++
的意思是:“使用i的值,然后递增它”。向下传递时,它将始终为零。它是值类型,而不是引用类型。如果这是一个对象,那就没问题了,因为它会被当作引用来处理。
https://stackoverflow.com/questions/12860070
复制相似问题