1

在Java中,当将参数传递给方法并在方法调用期间修改传递的参数时,是否可以保证结果是预期的?
例如
a.method(++i);

例如,是否保证变量内部将具有method更新i的值?

或者a.method(i++)会在递增之后还是之前 method得到值?i

对于所有类似情况也相同。
我记得这在 C++ 中是被禁止的,因为特定于实现,但也许我记错了。

4

3 回答 3

2

前缀/后缀递增/递减运算符的java语言规范:

  • 前缀:http ://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.15.1 。

... 值 1 被添加到变量的值中,并且总和被存储回变量中... 前缀增量表达式的值是存储新值后的变量值。

... 值 1 被添加到变量的值中,并且总和被存储回变量中... 后缀增量表达式的值是存储新值之前的变量值。

我认为这很清楚。该函数将在前缀情况下获取增量值,而不是在后缀情况下。

于 2013-02-25T19:07:18.290 回答
1

在调用方法之前++i计算表达式。

从 Java 语言规范的“方法调用的运行时评估”部分:

... 其次,评估参数表达式。... 第五,创建一个新的激活帧,必要时执行同步,并将控制转移到方法代码。

并且来自 Java 语言规范的“前缀增量运算符”部分:

前缀增量表达式的值是新值存储后变量的值。

于 2013-02-25T19:06:09.527 回答
0

在 Java 中没有问题,方法将接收更新的值。

于 2013-02-25T18:59:44.797 回答