首页 > 解决方案 > 当你在java中将一个数组分配给另一个数组时会发生什么?

问题描述

我在这里有一些 java 代码,我正在为 ArrayList 创建一个 ADT(我知道 Java 框架有一个,但我只想看看它下面是什么)。在这里,我正在创建一个将数组大小加倍的方法。

我的问题是,当我执行 oldArray=newArray 时,内存中会发生什么。我的猜测是指向 oldArray 的变量现在指向新数组。但是现在,在内存中,这是否意味着有 2 个变量指向新数组?而且由于没有对旧数组的引用,垃圾收集器会从内存中删除旧数组吗?

public void resize(int newCapacity) {
    E[] newData = (E[]) new Object[2*data.length];

    for(int i=0; i<data.length; i++) {
        newData[i] = data[i];
    }

    data = newData;
}

标签: javaarrays

解决方案


newData 和都是data您创建的对象的引用,它们位于堆栈内存中,根据垃圾收集器的工作方式,当执行路径到达范围末尾时,每个引用将被删除,在两个引用被删除后垃圾进入堆以查看没有引用的对象,然后该对象将被删除。


推荐阅读