在Java中,当将参数传递给方法并在方法调用期间修改传递的参数时,是否可以保证结果是预期的?
例如
a.method(++i);
等
例如,是否保证变量内部将具有method
更新i
的值?
或者a.method(i++)
会在递增之后还是之前 method
得到值?i
对于所有类似情况也相同。
我记得这在 C++ 中是被禁止的,因为特定于实现,但也许我记错了。
前缀/后缀递增/递减运算符的java语言规范:
... 值 1 被添加到变量的值中,并且总和被存储回变量中... 前缀增量表达式的值是存储新值后的变量值。
... 值 1 被添加到变量的值中,并且总和被存储回变量中... 后缀增量表达式的值是存储新值之前的变量值。
我认为这很清楚。该函数将在前缀情况下获取增量值,而不是在后缀情况下。
在调用方法之前++i
计算表达式。
从 Java 语言规范的“方法调用的运行时评估”部分:
... 其次,评估参数表达式。... 第五,创建一个新的激活帧,必要时执行同步,并将控制转移到方法代码。
并且来自 Java 语言规范的“前缀增量运算符”部分:
前缀增量表达式的值是新值存储后变量的值。
在 Java 中没有问题,方法将接收更新的值。