在Java中,通过getter引用字段与通过变量引用字段之间存在性能差异吗?

Jam*_*hon 5 java variables getter performance reference

这样做有什么不同吗?

Field field = something.getSomethingElse().getField();
if (field == 0) {
//do something    
}
somelist.add(field);
Run Code Online (Sandbox Code Playgroud)

if (something.getSomethingElse().getField() == 0) {
//do something    
}
somelist.add(something.getSomethingElse().getField());
Run Code Online (Sandbox Code Playgroud)

通过getter引用字段会导致性能损失,还是与引用指定变量相同?我知道变量只是对内存空间的引用,因此getter应该是另一种获取内存空间的方法.

请注意,这是一个学术问题(只是好奇的学校),而不是一个实际问题.

Spe*_*ort 11

这是一个微不足道的损害.不要太在乎自己,否则你会成为过早优化的牺牲品.如果你的申请很慢,这不是原因.


Chs*_*y76 7

假设getSomethingElse()被定义为

public SomethingElse getSomethingElse() {
    return this.somethingElse;
}
Run Code Online (Sandbox Code Playgroud)

性能差异将是最小的(如果它被内联则为零).然而,在现实生活中,你不能总是确定是这种情况 - 可能会在幕后发生一些处理(不一定在对象本身,但是,例如,通过AOP代理).因此,将结果保存在变量中以进行重复访问可能是一个好主意.


Pau*_*rie 5

通过getter访问变量会导致方法调用存在差异.可以想象,JVM可以在某些情况下优化方法调用,但它一种方法调用.

也就是说,如果代码中最大的瓶颈或性能问题是访问器方法的开销,我会说你没有太多担心.