Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 调用访问器方法的良好实践?_Java - Fatal编程技术网

Java 调用访问器方法的良好实践?

Java 调用访问器方法的良好实践?,java,Java,如果这个问题很愚蠢,请原谅我…我是一个编程新手。我感到困惑的一件事是,我是否应该在每次调用获得某个值的方法时实例化一个新变量,或者保留一个本地副本并更新它 举例来说,假设我有一个机器人在迷宫中导航。机器人驾驶员操作机器人,并且必须获得机器人的坐标以执行某些操作,例如感知障碍物 public class RoboDriver { public void senseObstacle() { int[] position = robot.getPosition(); ...

如果这个问题很愚蠢,请原谅我…我是一个编程新手。我感到困惑的一件事是,我是否应该在每次调用获得某个值的方法时实例化一个新变量,或者保留一个本地副本并更新它

举例来说,假设我有一个机器人在迷宫中导航。机器人驾驶员操作机器人,并且必须获得机器人的坐标以执行某些操作,例如感知障碍物

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

public class RoboDriver {
   int[] robotPositionCopy;
   public void senseObstacle() {
     this.robotPositionCopy = robot.getPosition();
     ...
   }
}
机器人对象中的位置坐标始终是最新的。如果我想得到最新的职位,这两个例子中哪一个更好,为什么?或者它没有太大区别吗?

一个人没有实例化一个局部变量,你的话让我觉得你可能认为这是有代价的。局部变量是绝对自由的:它们只是给定给内存位置的名称,内存位置无论如何都会存在于方法的堆栈框架中

与此相反,您的第二个示例声明了一个实例变量,而这一变量是有代价的:类的每个实例都必须在堆上为它保留内存,即使您仅在执行方法时使用它


因此,我认为建议是一致的:不要声明实例变量,除非你需要它们来保存长期存在的对象状态。

这取决于你需要如何/何时使用这些信息。@DaveNewton在这种情况下,我只需要在RoboDriver试图感测某些东西时更新的坐标。所以每次调用sense时,它都需要更新的坐标。您可以同时使用这两种坐标。但是,第二种方法将使数组对象在内存中的保存时间通常比局部变量长。@Mohammad因此,就性能而言,第1种方法稍好一些?@Renren29那么可能没有理由将其保存在
RoboDriver
实例变量中(与第一个示例中的局部变量相反)。