是否应该对多次调用的方法进行变量?

时间:2012-08-10 09:50:38

标签: java

这是我的方法:

public void addEmployee(Employee employee) {
if(! employees.containsKey(employee.getName())) {
      employees.put(employee.getName(), employee);
  }
}

如您所见,有一个不止一次调用的访问者employee.getName()。程序员应该为这样的多个调用创建一个单独的变量吗?像这样:

public void addEmployee(Employee employee) {
String name=employee.getName();
if(! employees.containsKey(name)) {
   employees.put(name,employee);
  }
}

从性能的角度来看,它不仅仅是风格吗?

6 个答案:

答案 0 :(得分:3)

从风格的角度(更清晰)和性能观点(不做两次操作)都有意义。例如,getName可能需要查询数据库,您不希望执行其中两个!

答案 1 :(得分:2)

从性能的角度来看,它是否有意义,而不仅仅是样式?

如果getName()

中包含大量计算,则会发生这种情况

答案 2 :(得分:2)

这当然不那么冗长。

性能可能是一个问题,但我不会为此过早地优化 。您可能会争辩说,如果/ getName()被重构以便在将来做更复杂的事情时,提前取出变量可以避免潜在的性能问题。一个普通的吸气剂不一定是一个普通的吸气剂(这就是为什么我提倡单元测试这样的东西 - 即使是粗略的方式)

但是,要考虑的另一个问题是不变性。可以employee.getName()更改,并且可以在上面运行时由另一个线程更改吗?如果可以,那么您的映射逻辑将会中断。

答案 3 :(得分:1)

从样式的角度来看,我更喜欢第一个选项,因为我不认为你应该引入局部变量,除非你要改变它们。

从性能的角度来看,我不确定会有多大差异,我不知道JIT可以做什么。 (在C ++中,getter方法可以标记为const,编译器可以通过简单的方式进行优化。)

答案 4 :(得分:0)

调用方法而不是读取变量会增加很小的开销。如果性能是一个大问题,并且这种方法每秒被调用很多次,那么它可能会有所不同。否则它是一种风格偏好。

答案 5 :(得分:0)

1。如果仅将其称为 ,则将其分配给另一个变量将毫无用处。

2。如果多次使用 getName() 处理 ,然后将其分配给变量供以后使用,将是一个好主意,因为它将节省大量的处理时间。