[英]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.