在方法调用期间修改参数时是否有任何保证?

时间:2013-02-25 18:56:39

标签: java methods jvm arguments

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

保证,例如method内变量i将更新 值?

a.method(i++)增加之前或之前methodi获得{{1}}的值吗?

对于所有类似案件也是如此 我有点记得在C ++中禁止这是特定于实现的,但也许我记得错了。

3 个答案:

答案 0 :(得分:2)

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

  

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

  

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

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

答案 1 :(得分:1)

调用方法之前,表达式++i被评估。

来自Java语言规范的"Runtime evaluation of method invocation"部分:

  

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

来自Java语言规范的"Prefix increment operator"部分:

  

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

答案 2 :(得分:0)

Java没问题,方法会收到更新后的值。