内存管理在Java中如何在一行中返回数组?
执行此代码时,内存会发生什么变化
int[] dim1 = new int[2];
dim1 = myObject.getCoord();
public int[] getCoord() {
int[] dim2 = new int[] {y1, x1} ;
return dim2;
}
似乎空间首先分配给两个数组dim1
和dim2
。虽然dim1将存活,但dim2仅存活两行,然后进入gc。对于非常大的阵列,这似乎会导致一些性能问题。然而,下面的代码是编译时错误
public int[] getCoord() {
return {y1, x1} ;
}
背后的逻辑是什么?仅创建一个数组的正确方法是什么
# 1 楼答案
当您重新分配
dim1
时,它会忘记之前存储的值。它实际上是dim1
的初始(空)值,该值正在被垃圾收集。你也可以很容易地做到:为了节省内存
对于单班轮,只需执行以下操作:
然后在你的方法中使用:
然而,这将消耗与我的第一个选项完全相同的内存量
# 2 楼答案
有两种方法可以确保只创建一个数组
或者
# 3 楼答案
你是说像这样吗
方法调用只创建了一个数组,并且只有一个引用dim1
但是理想情况下您可能不希望“get”方法创建新的东西,因为仅仅通过查看声明,您可能不会想到这一点。就我个人而言,我更喜欢
这就明确了这个方法是在“创造”一个东西
# 4 楼答案
无论您如何尝试缩短代码,它都不会改变这样一个事实:当对
getCoord()
的调用返回时,它只会向数组返回一个引用,而不是数组内容的副本试图让代码更简洁并不能解决性能问题
如果你想的话,不要一开始就把
dim1
初始化为new int[2];
,因为不管怎样,它都会被替换掉。但这是小土豆