2

静的メソッドは、非静的メソッドとは異なる方法でパラメーターを処理しますか?プロジェクトに次のクラス/メソッドがあるとします。

public abstract class A {
   public static void populateList(List<Item> list) {
      list.add(new Item("something")); //Item is custom class
   }

と:

public class B {
   public void tryToPopulateList(List<Item> list) {
      list.add(new Item("something2"));
   }

A.populateList(myList)ここで、 thenを使用してリストをクラスAに渡すと、メソッド本体のポインターは呼び出し元listのポインターと同じになります。したがって、この静的メソッドは、ローカルコピーだけでなく、実際に変更されます。 しかし、私が電話した場合:myListmyList

B b = new B();
b.tryToPopulateList(myList);

次に、メソッド内のポインタはへのポインタlistとは異なるmyListため、メソッドのローカルコピーが作成され、このコピーに「something2」が追加されていると思います。その結果、この場合、元のmyListは変更されません。
この動作は正常ですか?静的関数でパラメーターの受け渡しがどのように機能するかについての説明や説明へのリンクはありますか?
はい、リストを変更したい場合は、関数から新しいリストを返す方がよいことはわかっていますが、このトピックがどこにも説明されていないので、私はただ好奇心が強いです。ありがとう。

編集
コメントで述べたように、パラメータは静的メソッドと非静的メソッドで同じように扱われます。ここに記載されていないコードを間違えました。

4

2 に答える 2

2

通常の状況では、違いはありません。Javaのすべてのメソッドパラメータは参照ごとに渡されます。つまり、リストのアドレス(ポインタ)が呼び出されたメソッドのパラメータにコピーされます。

あなたが説明する振る舞いが発生する可能性がある状況は1つしか考えられません。アスペクト指向プログラミング機能を提供するフレームワークを使用していますか?非静的メソッド呼び出しが傍受されている可能性があります。

于 2012-12-21T16:20:50.430 に答える
0

これは結論です。Javaのすべてのメソッドパラメータは参照による値です。

于 2012-12-21T17:23:13.837 に答える