第一个数组列表: - ArrayList<Object> list1;
第二个数组列表: - ArrayList<Object> list2;
假设我已经用list1
填充了一些对象。
现在,我使用list1
从list2.add(list1[i])
复制一些对象,并使用list2
更改为list2[j].setA = something
中的对象。
list1中对象的相应值A是否会发生变化?
实际上我希望更改值A
。
答案 0 :(得分:9)
它会改变。列表仅包含对象*的引用。因此,在将list1
中的一些元素添加到list2
之后,这两个列表将共享对相同物理对象的引用。
* 在Java集合中,您不能存储基本类型,例如int
,只能存储它们的对象(在这种情况下为Integer
),始终通过引用。
答案 1 :(得分:1)
java.util.List
(包括ArrayList
和LinkedList
)包含对象的引用。也就是说,如果你有一个对象的实例并将该实例放在两个列表中,那么这两个列表将引用相同的实际对象。
List
)都不能包含对象。它们只能包含对象的引用。
这是一个使用变量来明确功能的例子:
Foo x = new Foo(); // Create a new instance of Foo and assign a reference to it to "x"
Foo y = x; // Copy the reference (not the actual object) to "y"
// At this point, both x and y points to the same object
x.setValue(1); // Set the value to 1
y.setValue(2); // Set the value to 2
System.out.println(x.getValue()); // prints "2"
现在,列表也是如此:
List<Foo> listA = new ArrayList<Foo>();
List<Foo> listB = new ArrayList<Foo>();
listA.add(new Foo());
listB.add(listA.get(0));
// The single instance of Foo is now in both lists
listB.get(0).setValue(1);
System.out.println(listA.get(0).getValue()); // Prints "1"
答案 2 :(得分:0)
是的,它会改变。在java中,您使用对象的引用。所以当你把一个对象放在一个列表中时,你只需将它的引用放在列表中。当您将其复制到另一个列表时,您只需复制引用,当您更改某些内容时,您正在使用引用来更改原始对象。所以原来的对象已被更改。