在Java中将参数传递给方法并在期间修改传递的参数时,方法调用是否保证结果符合预期?
例如
a.method(++i);
等
保证,例如method
内变量i
将更新
值?
或a.method(i++)
增加之前或之前method
会i
获得{{1}}的值吗?
对于所有类似案件也是如此 我有点记得在C ++中禁止这是特定于实现的,但也许我记得错了。
答案 0 :(得分:2)
前缀/后缀增量/减量运算符的java语言规范:
...将值1添加到变量的值中,并将总和存储回变量...前缀增量表达式的值是 存储新值后变量 。
...将值1添加到变量的值中,并将总和存储回变量...后缀增量表达式的值是新值之前的变量的值存储强>
我认为很清楚。该函数将在前缀的情况下获得递增的值,而不是在后缀的情况下。
答案 1 :(得分:1)
在调用方法之前,表达式++i
被评估。
来自Java语言规范的"Runtime evaluation of method invocation"部分:
......其次,评估参数表达式。 ...第五,创建新的激活帧,必要时执行同步,并将控制转移到方法代码。
来自Java语言规范的"Prefix increment operator"部分:
前缀增量表达式的值是存储新值后变量的值。
答案 2 :(得分:0)
Java没问题,方法会收到更新后的值。