これがarraylistへの「ポインタ」として機能するのか、それともまったく新しいarraylistオブジェクトを作成するのかはわかりません
を使用するnew
と、ブランドスパンキングの新しいインスタンスがArrayList
作成されます(これはあなたが求めているものです)。ただし、その要素のコピーを自動的に作成することもありません(これはあなたが探しているものだと思います)。これが意味することは、新しいリストで変更可能なオブジェクトを変更すると、元のリストがまだ存在する場合は元のリストでも変更されるということです。Object
これは、 Listが実際Object
の s 自体ではなく、それらの s への参照 (ちょっとしたものですが、正確にはポインターではない) のみを保持するためです。
例えば:
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.
}
したがって、2 つの List 自体は個別に変更できることがわかりますが、別の を受け入れるコンストラクターを使用するList
と、両方に同じPerson
インスタンスへの参照が含まれ、これらのオブジェクトの状態が 1 つの List で変化すると、それらのオブジェクトも変化します。その他(ポインターのようなもの)。