Java postincrement(++)在作为参数传递时表现不符合预期
我遇到了以下问题:
private void doStuff(int i) {
if(i>10) {
return;
}
doStuff(i++);
}
public void publicMethod() {
doStuff(i);
}
我希望它运行doStuff
10次,然后返回
但是i++
在用0
再次调用doStuff
之前不会执行
结果是一个无限循环。我知道如何修复它,但我想知道这种行为是正确的还是错误的
# 1 楼答案
它的行为与预期的相同,您可能希望用
++i
替换i++
关于如何使用前缀/后缀一元增量运算符,请查看oracle documentation:
(摘自链接页面)
# 2 楼答案
++
操作符的工作原理与预期一样。它首先返回变量的值,然后增加变量,因此总是传递0这是:
就像:
# 3 楼答案
i++
的意思是:“使用i的值,然后增加它”。当传递下去时,它将始终为零。它是一种值类型,而不是引用类型。如果那是一个对象,那就没问题了,因为它会被当作引用来处理# 4 楼答案
是的,后增量运算符的结果是原始值。。。然后在对该方法的下一次调用中,有一个新的
i
。换句话说,这个电话:相当于:
从JLS section 15.14.2
既然你以后不再使用
i
(因此对它的任何副作用都是毫无意义的),为什么不简化你的生活呢(与Java中的所有参数一样,您会看到传递值——更改方法中
i
的值不会更改调用方参数的值。)