gpt4 book ai didi

java - 当我将数组参数分配给构造函数中的成员时会发生什么?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:11:02 25 4
gpt4 key购买 nike

我有一个类 MyClass,其成员为 float[] myArray。我使用以下内容构建:

public MyClass(float[] initArray) {
myArray = initArray;
}

我想知道幕后发生了什么:JVM 是否将指针设置为相同的?我是否有将 myArray 变量丢失给垃圾收集器的风险?

是否最好执行以下操作:

public MyClass(float[] initArray) {
int len = initArray.length;
myArray = new float[len];
System.arraycopy(initArray, 0, myArray, 0, len);
initArray = null;
}

我问是因为我在内存紧张的嵌入式环境中编程,我不想丢失变量(例如第一个示例)或浪费额外空间(例如通过将 initArray 设置为null,我希望 GC 处理它并将 RAM 还给我)。

编辑

在第一种方法中,如果 initArray 是在其他函数中创建的局部变量,会发生什么情况?

最佳答案

JVM 是否设置相同的指针?
-> 是的,在 Java 中,将它们称为引用更好。

我是否有将 myArray 变量丢失给垃圾收集器的风险?
-> 不,除非您丢失了对 MyClass 对象的引用。

执行以下操作会更好吗?
-> 最好 - 不。这取决于你需要什么,
这里你创建一个实际的副本,两者都可以。
在那里设置 initArray = null; 是没用的 btw
因为 initArray 不是通过引用传入的。在Java中
一切都按值传递,甚至引用
(initArray 是这里的引用)

在第一个方法中,如果 initArray 是一个
在其他函数中创建局部变量?

-> 把它想象成你正在保存对该局部变量的引用
在你的 MyClass 对象中,当你的函数完成时你不会丢失它
执行(我猜这是你关心的)。简单地说,它会活着
只要您的 MyClass 对象(您保存它的对象)存在。

关于java - 当我将数组参数分配给构造函数中的成员时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21368930/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com