私は、これはArrayListに「ポインタ」として動作しますか 場合、これが作成されますかどうかわからないんだけど全く新しいarraylistオブジェクト
new
を使用すると、ArrayList
というブランドの新しいインスタンスが作成されます(これはあなたが尋ねたものです)。はになります。しかし、ではなく、も自動的にその要素のコピーを作成します(これはあなたが探しているものです)。これが意味することは、新しいList内の変更可能なオブジェクトを変更した場合でも、元のList内で変更可能なオブジェクトがまだ周囲にある場合に変更されることです。これは、リストにはObject
の参照番号(ちょっとしたものだが正確なポインタではない)が含まれているため、実際のObject
のものではないからです。例えば
:だから、あなたは二つのリスト自体が独立して変更することができますが、別のList
を受け入れるコンストラクタを使用する場合、両方が同じPerson
インスタンスへの参照が含まれている、そしてときになること
Person person = new Person("Rob"); // create a new Object
List<Person> myList = new ArrayList<Person>();
myList.add(person);
// Create another list accepting the first one
List<Person> myList2 = new ArrayList<Person>(myList);
for(Person p : myList2) {
p.setName("John"); // Update mutable object in myList2
}
person = new Person("Mary"); // stick another object into myList2
myList2.add(person);
for(Person p : myList2) {
System.out.println(p.getName()); // prints John and Mary as expected
}
for(Person p : myList) {
System.out.println(p.getName()); // prints only one result, John.
}
見ることができますこれらのオブジェクトの状態は1つのリスト内で変化し、他のオブジェクトでも変化します(ポインタのようなもの)。
要素のコピーを作成しません。 (そして奇妙なことになるかもしれません。) – esej
ArrayListのソースコードを自分で確認できます。これはJDKに含まれています。 –