java - 当你在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;
}
解决方案
newData
和都是data
您创建的对象的引用,它们位于堆栈内存中,根据垃圾收集器的工作方式,当执行路径到达范围末尾时,每个引用将被删除,在两个引用被删除后垃圾进入堆以查看没有引用的对象,然后该对象将被删除。
推荐阅读
- r - 扩展数据集以填充 R 中的顺序值
- rust - 闭包作为通用返回 `impl FnMut(T)`
- php - 如何在使用php的特定数量的记录后在正在运行的查询中执行另一个查询?
- ios - 这种类型的 SwiftUI 附加函数模式叫什么,我如何自己制作?
- database - 在 Firestore 中创建新会话时查找可能的冲突
- javascript - 更改由选择 HTML 元素更改的图像的问题
- node.js - 模块导出不导出变量
- linux - 如何在 bash 脚本中执行 mongodb 命令
- database - 如何有效地更新 mongodb 记录的一部分?
- pervasive - '[pervasive][ODBC Engine Interface]Invalid date, time or timestamp value' 当试图比较日期时