假设我有以下代码:
ArrayList<String> aList = new ArrayList<String>();
aList.add(new String("abc");
...
String aString = aList.get(0);
aString是否具有aList.get(0)的深层副本,这意味着带有新String对象的新内存位置,或者aString是否只被分配了一个指向同一对象的引用指针,因为aList在位置0?
答案 0 :(得分:2)
没有隐式深层复制,分配了引用。
答案 1 :(得分:1)
aString
包含对表达式new String("abc")
创建的对象的引用。它不包含对列表第一个位置的引用,因此在赋值后更改列表不会更改aString
。此外,在Java中,字符串是不可变对象,这意味着不能更改字符串本身的值。