java - 是否为简单的getter初始化一个临时变量?

时间:2012-05-15 20:47:30

标签: java performance variables optimization

关于Java性能的一个非常不重​​要的问题,但它让我今天感到疑惑。

说我有简单的吸气剂:

public Object getSomething() {
     return this.member;
}

现在,我想在某些函数/算法中需要两次(或更多)getSomething()的结果。我的问题:调用getSomething()两次(或更多)或声明一个临时的局部变量并从那时起使用这个变量有什么不同吗?

即,

public void algo() {
    Object o = getSomething();

    ... use o ...
}

public void algo() {
    ... call getSomething() multiple times ...
}

我倾向于混合两种选择,没有特别的原因。我知道这没关系,但我只是想知道。

谢谢!

3 个答案:

答案 0 :(得分:6)

从技术上讲,不多次调用该方法会更快,但情况可能并非总是如此。 JVM可能会优化方法调用以使其内联,您根本不会看到差异。在任何情况下,差异都可以忽略不计。

但是,总是使用吸气剂可能更安全。如果州的价值在您的通话之间发生变化怎么办?如果要使用一致版本,则可以保存第一次调用的值。否则,您可能希望始终使用getter。

在任何情况下,您都不应该根据性能做出这个决定,因为它可以忽略不计。我会选择一个并坚持下去。我建议总是通过你的getter / setter。

答案 1 :(得分:1)

Getters和setter是关于封装和抽象的。 当您决定多次调用getter时,您会对该类的内部工作原理进行假设。例如,它不会进行昂贵的计算,或者其他线程不会更改该值。

我认为最好只调用一次getter并将其结果存储在一个临时变量中,从而允许你自由地重构实现类。

作为一则轶事,我曾经被一个getter返回数组的变化所困扰,但是实现类已从数组属性更改为使用列表并在getter中进行转换。

答案 2 :(得分:0)

编译器应优化其中任何一个基本相同的代码。