静的メソッドは、非静的メソッドとは異なる方法でパラメーターを処理しますか?プロジェクトに次のクラス/メソッドがあるとします。
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
のポインターと同じになります。したがって、この静的メソッドは、ローカルコピーだけでなく、実際に変更されます。
しかし、私が電話した場合:myList
myList
B b = new B();
b.tryToPopulateList(myList);
次に、メソッド内のポインタはへのポインタlist
とは異なるmyList
ため、メソッドのローカルコピーが作成され、このコピーに「something2」が追加されていると思います。その結果、この場合、元のmyListは変更されません。
この動作は正常ですか?静的関数でパラメーターの受け渡しがどのように機能するかについての説明や説明へのリンクはありますか?
はい、リストを変更したい場合は、関数から新しいリストを返す方がよいことはわかっていますが、このトピックがどこにも説明されていないので、私はただ好奇心が強いです。ありがとう。
編集
コメントで述べたように、パラメータは静的メソッドと非静的メソッドで同じように扱われます。ここに記載されていないコードを間違えました。