0

当我这样做时会发生什么:

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清除吗?

4

4 回答 4

6

好吧,在listA = listB变量listA引用与listB. Java 中没有像 C++ 等中那样的复制构造函数。

于 2012-05-03T07:24:15.150 回答
2

只是引用的值将被复制,因此它们都将引用同一个对象

于 2012-05-03T07:24:39.040 回答
1

只有原始类型按值复制,如果您执行上述操作,您将让 listA 和 listB 引用同一个列表,因此无论您对 listA 做什么,都会对 listB 产生相同的效果,反之亦然。如果您想丢失引用,只需将其中一个变量设置为 null。

于 2012-05-03T07:28:54.080 回答
0

不,listA并且listB是两个不同的整数列表,它们彼此不相关。如果你在clear()上做一个ListAListB根本不会受到影响。在您的情况下,最后ListA引用已更改,变量现在指向ListB. 因此,这两个变量都指向一个 List,即ListB. 因此,对这些引用中的任何一个的任何操作都将产生相同的效果。ListA对象已经是空的,它什么都不包含。并且没有任何方法可以引用该对象。

于 2012-05-03T07:27:49.133 回答