Java实例变量的本地引用

Ent*_*ops 7 java libgdx

在浏览Stagelibgdx源代码时,我遇到了这个段:

public void draw () {
    Camera camera = viewport.getCamera();
    camera.update();

    if (!root.isVisible()) return;

    Batch batch = this.batch;
    if (batch != null) {
        batch.setProjectionMatrix(camera.combined);
        batch.begin();
        root.draw(batch, 1);
        batch.end();
    }

    if (debug) drawDebug();
}
Run Code Online (Sandbox Code Playgroud)

(GitHub上的链接.)

我感兴趣的是这一行: Batch batch = this.batch;

我的第一个猜测是一些缓存改进.我是对的,还是有其他理由避免直接使用实例变量?

mar*_*tin 3

在早期的 Java 时代,恕我直言,这有时被用作优化,以避免访问成员变量。但现在我相信 Hotspot 可以比我们人类更好地优化。

但是,在这种情况下,它可能用于防止并发修改该变量时出现问题,因为begin()可能end()需要在同一实例上调用 和 。