什么更好:
这个
public Move(moveString) {
ArrayList<Square> moveSquares = splitToSquares(moveString.toLowerCase());
this.from = new Square(moveSquares.get(0));
this.to = new Square(moveSquares.get(1));
}
或者这个:
public Move(moveString) {
ArrayList<Square> moveSquares = splitToSquares(moveString.toLowerCase());
this.from = moveSquares.get(0);
this.to = moveSquares.get(1);
}
首先,我使用移动对象中的信息创建一个新对象。 第二种,我直接使用对象。
它现在对我的程序没有太大影响,但我想知道 Java 是否需要保留完整的 ArrayList,因为我引用了它们。如果这是一个巨大的列表,最好只复制我需要的两个对象,然后让 GC 收集其余的对象,不是吗?
或者 GC 是否足够聪明,可以自己做这件事?然后第一种方法会制作不必要的对象副本。在这种情况下没什么大不了的,但在另一种情况下可能会有成百上千个这样的对象。
最佳答案
在这两种情况下,一旦您退出 Move()
方法,ArrayList
将不会被引用。您引用列表内 的元素并不重要。如果列表本身不可访问,则它有资格进行垃圾回收。
只要两个引用的元素被另一个 Activity 对象引用,它们就会保持 Activity 状态。在您的第二个示例中,至少只要您的 Move
对象可以访问,这两个元素就可以访问。但是如果列表中有 其他 元素,并且它们没有在列表之外被引用,那么当列表超出范围时,那些 元素将有资格进行垃圾回收.
关于java:使用现有对象还是创建一个新对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20505532/