1

メソッドに引数を渡し、メソッド呼び出し中に渡された引数を変更するJavaでは、結果が期待どおりであることが保証されますか?

a.method(++i); など

たとえば、変数内に更新された値が あることが保証されていますか?methodi

またはインクリメント後または前 の値を取得しますかa.method(i++)?methodi

同様のすべてのケースでも同じです。
これは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言語仕様のセクション「メソッド呼び出しの実行時評価」から:

...次に、引数式が評価されます。... 5番目に、新しいアクティベーションフレームが作成され、必要に応じて同期が実行され、制御がメソッドコードに移されます。

そして、Java言語仕様のセクション「プレフィックスインクリメント演算子」から:

プレフィックスインクリメント式の値は、新しい値が格納された後の変数の値です。

于 2013-02-25T19:06:09.527 に答える
0

Java では問題ありません。メソッドは更新された値を受け取ります。

于 2013-02-25T18:59:44.797 に答える