[英]Are there any guarantees when modifying arguments during method invocation?
在Java中,当将参数传递给方法并在方法调用期间修改传递的参数时 ,它是否保证结果符合预期?
例如
a.method(++i);
等等
是否保证例如内部method
变量i
将具有更新值?
或者a.method(i++)
Will method
在递增之后或之前得到i
的值?
对于所有类似的情况也是如此。
我有点记得在C ++中禁止这是特定于实现的,但也许我记得错了。
前缀/后缀增量/减量运算符的java语言规范:
...将值1添加到变量的值中,并将总和存储回变量...前缀增量表达式的值是存储新值后变量的值 。
...将值1添加到变量的值中,并将总和存储回变量...后缀增量表达式的值是存储新值之前的变量值 。
我觉得很清楚。 该函数将在前缀的情况下获得递增的值,而不是在后缀的情况下。
在调用方法之前计算表达式++i
。
从Java语言规范的“方法调用的运行时评估”部分 :
......其次,评估参数表达式。 ...第五,创建新的激活帧,必要时执行同步,并将控制转移到方法代码。
从Java语言规范的“前缀增量运算符”部分 :
前缀增量表达式的值是存储新值后变量的值。
在Java中没有问题,方法将收到更新的值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.