Java:对可重定位对象的引用是如何工作的?

Java:对可重定位对象的引用是如何工作的?,java,Java,所谓可重定位对象,我指的是当没有足够的连续空间时,可以在内存中重新定位自身的对象。(例如ArrayList) List list1=new ArrayList(); List list2=list1; 如果我继续向列表1添加内容,它最终会重新定位,因为没有足够的连续地址空间。那么列表2和列表是否仍然指向同一地址?如果是这样,它是如何在下面完成的?没有对象可以重新定位自身。这里发生的情况是list1和list2指向同一个对象,该对象(即ArrayList)包含对实际存储空间的另一个引用(即用于存

所谓可重定位对象,我指的是当没有足够的连续空间时,可以在内存中重新定位自身的对象。(例如ArrayList)

List list1=new ArrayList();
List list2=list1;

如果我继续向列表1添加内容,它最终会重新定位,因为没有足够的连续地址空间。那么列表2和列表是否仍然指向同一地址?如果是这样,它是如何在下面完成的?

没有对象可以重新定位自身。这里发生的情况是
list1
list2
指向同一个对象,该对象(即
ArrayList
)包含对实际存储空间的另一个引用(即用于存储数据的数组)。如果列表增长过大,则指向存储空间数组的指针将更改,而不是
ArrayList对象本身的位置。

任何对象都无法重新定位自身。这里发生的情况是
list1
list2
指向同一个对象,该对象(即
ArrayList
)包含对实际存储空间的另一个引用(即用于存储数据的数组)。如果列表增长过大,则指向存储空间数组的指针将发生更改,而不是
ArrayList
对象本身的位置。

那么您要问的是哪一个?Java语言如何工作或JVM如何管理内存?list1和list2位于同一内存位置实际上,
ArrayList
是一个固定大小的类。整个JVM中唯一大小可变的对象是数组。那么你问的是哪一个?Java语言如何工作或JVM如何管理内存?list1和list2位于同一内存位置实际上,
ArrayList
是一个固定大小的类。整个JVM中唯一大小可变的对象是数组。
 List<String> list1 = new ArrayList<>();
 List<String> list2 = list1;