当我这样做时会发生什么:
List<Integer> listA = new ArrayList<Integer>();
List<Integer> ListB = new ArrayList<Integer>();
listA = ...filled with some data...
listB = ...filled with some other data...
listA.clear();
listA = listB;
值是复制还是仅重新引用?如果我现在(在此代码之后)再次致电listA.clear()
,那么listB
也会明确吗?
答案 0 :(得分:6)
好吧,在listA = listB
后,变量listA
引用与listB
相同的列表。 Java中没有像C ++那样的复制构造函数。
答案 1 :(得分:2)
只会复制引用的值,因此它们都将引用相同的Object
答案 2 :(得分:1)
只有原始类型按值复制,如果你这样做,你会有listA和listB引用同一个列表,所以无论你用listA做什么都会对listB产生相同的效果,反之亦然。 如果你想丢失引用,只需将其中一个变量设置为null。
答案 3 :(得分:0)
不,listA
和listB
是两个不同的整数列表,它们彼此无关。如果您在clear()
上执行ListA
,则ListB
将不受影响。在您的情况下,最后ListA
引用已更改,变量现在指向ListB
。因此,这两个变量都指向一个ListB
的List。因此,对任何这些引用的任何操作都将具有相同的效果。 ListA
对象已经为空,它什么都没有。并且没有任何方法可以引用该对象。