2014-10-09 97 views
2

请原谅我,如果这个问题是愚蠢的......我是一个新手,当涉及到编程。我感到困惑的一件事是,我是否应该每次调用一个获取某个值的方法或者保存本地副本并更新该方法时,实例化一个新变量。调用存取方法的好习惯?

为了说明,假设我有一个机器人导航迷宫。机器人驾驶员操作机器人并且必须获取机器人的坐标以执行诸如感测障碍物的一些动作。

public class RoboDriver { 
    public void senseObstacle() { 
    int[] position = robot.getPosition(); 
    ... 
    } 
} 

public class RoboDriver { 
    int[] robotPositionCopy; 
    public void senseObstacle() { 
    this.robotPositionCopy = robot.getPosition(); 
    ... 
    } 
} 

机器人对象中的位置坐标总是最新的。所以如果我想获得更新的位置,这两个例子中的哪一个更好,为什么?或者它没有太大区别?

+0

这取决于您何时/何时需要使用这些信息。 – 2014-10-09 17:29:24

+0

@DaveNewton在这种情况下,当RoboDriver试图感知某些东西时,我只需要更新的坐标。所以每次调用sense时,都需要更新后的坐标。 – mrQWERTY 2014-10-09 17:30:42

+0

你可以同时使用两者。但是,第二种方法会将数组对象保存在内存中的时间通常比局部变量长。 – 2014-10-09 17:30:57

回答

2

其中一个不实例化一个局部变量和你的说法,让我觉得你可能会认为这是有代价的。局部变量是完全免费的:它们只是存储位置的名称,在方法的堆栈帧上将存在

与之相对的是,你的第二个例子声明的实例变量,而一个人是有代价的:你的类的每个实例必须在堆上为它保留内存,即使你只是用它同时执行该方法。

所以,我认为这个建议是一致的:不要声明实例变量,除非你需要它们来保存长时间的对象状态。