gpt4 book ai didi

java - 关于对象回收

转载 作者:行者123 更新时间:2023-11-29 07:21:55 25 4
gpt4 key购买 nike

我有一个问题。以下代码有什么问题:

ArrayList tempList2 = new ArrayList();
tempList2 = getXYZ(tempList1, tempList2);

//method getXYZ
getXYZ(ArrayList tempList1, ArrayList tempList2) {

//does some logic and adds objects into tempList2

return tempList2;
}

代码将被执行,但似乎通过将 tempList2 传递给 getXYZ 方法参数,它正在执行对象回收。

我的问题是,回收 tempList2 arraylist 对象是否正确?

最佳答案

My question is, Is recycling the tempList2 arraylist object correct?

我不太明白你所说的“回收”是什么意思。这似乎不是应用程序正在回收对象以避免分配新对象的情况。 (这是 Java 中“回收”的正常含义。)

如果使用相同的 tempList2 对象多次调用 getXYZ,那么这只是一种将内容聚合到单个列表中的方法。 getXYZ 返回一个 ArrayList 的事实留下了这样的可能性,即可以更改方法实现以返回不同的 ArrayList 实例。这本身不是问题,但如果调用者没有适本地分配调用结果,则可能是问题。

如果 getXYZ 只为任何给定的 tempList2 对象调用一次,那么这看起来有点奇怪。

总而言之,这段代码看起来有点可疑,如果有人更改 getXYZ 的实现,它就会很脆弱。但是,这并不是完全错误的,并且可能有一些充分的理由(或历史原因)以这种方式做事,而这在您包含在问题中的小块代码中并不明显。

编辑 - 回应此评论(内联以使其可读)

Actually, the reason for the above code is, I wanted to avoid creating two arraylist objects. For ex: the conventional method would be

ArrayList tempList2 = new ArrayList(); 
tempList2 = getXYZ(tempList1);

//method getXYZ
getXYZ(ArrayList tempList1) {
ArrayList tempList = new ArrayList();
//INSTANTIATED ONLY ONCE
//does some logic and adds objects into tempList
return tempList;
}

执行此操作的真正常规方法是:

ArrayList tempList2 = getXYZ(tempList1);

ArrayList tempList2;
// some intermediate lines
tempList2 = getXYZ(tempList1);

这些都不需要为您的方法创建不必要的 ArrayList 实例,也不需要将 2 个 ArrayList 实例传递到 getXYZ 方法中。

关于java - 关于对象回收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3042817/

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