这是我的方法:
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);
}
}
从性能的角度来看,它不仅仅是风格吗?
答案 0 :(得分:3)
从风格的角度(更清晰)和性能观点(不做两次操作)都有意义。例如,getName
可能需要查询数据库,您不希望执行其中两个!
答案 1 :(得分:2)
从性能的角度来看,它是否有意义,而不仅仅是样式?
如果getName()
答案 2 :(得分:2)
这当然不那么冗长。
性能可能是一个问题,但我不会为此过早地优化 。您可能会争辩说,如果/ getName()
被重构以便在将来做更复杂的事情时,提前取出变量可以避免潜在的性能问题。一个普通的吸气剂不一定是一个普通的吸气剂(这就是为什么我提倡单元测试这样的东西 - 即使是粗略的方式)
但是,要考虑的另一个问题是不变性。可以employee.getName()
更改,并且可以在上面运行时由另一个线程更改吗?如果可以,那么您的映射逻辑将会中断。
答案 3 :(得分:1)
从样式的角度来看,我更喜欢第一个选项,因为我不认为你应该引入局部变量,除非你要改变它们。
从性能的角度来看,我不确定会有多大差异,我不知道JIT可以做什么。 (在C ++中,getter方法可以标记为const,编译器可以通过简单的方式进行优化。)
答案 4 :(得分:0)
调用方法而不是读取变量会增加很小的开销。如果性能是一个大问题,并且这种方法每秒被调用很多次,那么它可能会有所不同。否则它是一种风格偏好。
答案 5 :(得分:0)
1。如果仅将其称为 ,则将其分配给另一个变量将毫无用处。
2。如果多次使用 getName()
处理 ,然后将其分配给变量供以后使用,将是一个好主意,因为它将节省大量的处理时间。