Java是否创建了对象的深层副本,或者仅链接到其引用

时间:2016-07-10 13:49:23

标签: java

假设我有以下代码:

ArrayList<String> aList = new ArrayList<String>();
aList.add(new String("abc");
...
String aString = aList.get(0);

aString是否具有aList.get(0)的深层副本,这意味着带有新String对象的新内存位置,或者aString是否只被分配了一个指向同一对象的引用指针,因为aList在位置0?

2 个答案:

答案 0 :(得分:2)

没有隐式深层复制,分配了引用。

答案 1 :(得分:1)

aString包含对表达式new String("abc")创建的对象的引用。它不包含对列表第一个位置的引用,因此在赋值后更改列表不会更改aString。此外,在Java中,字符串是不可变对象,这意味着不能更改字符串本身的值。