代码是这样的
public class Universe {//abstract layer for life game
public static final int SIZE = 100;
private int[][] universe;
private int[][] prev_universe;
public Universe() {
//Initializing Universe
universe = new int[SIZE][SIZE];
prev_universe = new int[SIZE][SIZE];
initializeTiles();
}//Universe()
//////
///various stuff
////
public void doStep(){
//backup the current state of the universe
for(int i = 0; i < Universe.SIZE; i++) {
prev_universe[i] = universe[i].clone();
}
//process data in "universe"
//check if universe has changed
if(deepEquals(universe, prev_universe)){
Log.d("CKdebug", "system is stable!");
systemStable = true;
}
}
}//class Universe
一切正常,但我对一件事很好奇。我真的不使用 prev_universe
除了 doStep()
之外的其他任何地方,检查universe
的状态是否已经改变。我想我可以把它变成一个局部变量。
问题是,它在内存消耗方面是否有益,是否会因不断重新制作大型数组而增加系统(CPU 或其他)的负载 prev_universe
每次doStep()
叫做?更好的做法是什么?
最佳答案
如果 prev_universe
仅在单个方法中使用,则它应该是该方法私有(private)的。预分配一个小数组(100x100 很小)不会给您带来太多好处。
通过将 prev_universe
设置为实例变量,您将面临在其他方法中重复使用它的风险,这可能会导致难以跟踪的错误(如果其他方法不处理它)作为局部变量,并依赖于其现有状态,每次调用 doStep()
时都会重置)。
关于java - 将字段移至局部变量的好处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34308242/