关于Java性能的一个非常不重要的问题,但它让我今天感到疑惑。
说我有简单的吸气剂:
public Object getSomething() {
return this.member;
}
现在,我想在某些函数/算法中需要两次(或更多)getSomething()的结果。我的问题:调用getSomething()两次(或更多)或声明一个临时的局部变量并从那时起使用这个变量有什么不同吗?
即,
public void algo() {
Object o = getSomething();
... use o ...
}
或
public void algo() {
... call getSomething() multiple times ...
}
我倾向于混合两种选择,没有特别的原因。我知道这没关系,但我只是想知道。
谢谢!
答案 0 :(得分:6)
从技术上讲,不多次调用该方法会更快,但情况可能并非总是如此。 JVM可能会优化方法调用以使其内联,您根本不会看到差异。在任何情况下,差异都可以忽略不计。
但是,总是使用吸气剂可能更安全。如果州的价值在您的通话之间发生变化怎么办?如果要使用一致版本,则可以保存第一次调用的值。否则,您可能希望始终使用getter。
在任何情况下,您都不应该根据性能做出这个决定,因为它可以忽略不计。我会选择一个并坚持下去。我建议总是通过你的getter / setter。
答案 1 :(得分:1)
Getters和setter是关于封装和抽象的。 当您决定多次调用getter时,您会对该类的内部工作原理进行假设。例如,它不会进行昂贵的计算,或者其他线程不会更改该值。
我认为最好只调用一次getter并将其结果存储在一个临时变量中,从而允许你自由地重构实现类。
作为一则轶事,我曾经被一个getter返回数组的变化所困扰,但是实现类已从数组属性更改为使用列表并在getter中进行转换。
答案 2 :(得分:0)
编译器应优化其中任何一个基本相同的代码。