Java实例变量的本地引用

时间:2015-02-06 02:03:05

标签: java libgdx

在浏览libgdxStage源代码时,我遇到了这一段:

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();
}

Link on GitHub。)

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

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

2 个答案:

答案 0 :(得分:3)

在Java早期,这是imho sometimes used as an optimization,以避免访问成员变量。但是现在我相信,Hotspot可以比我们人类更好地进行优化。

但是,在此上下文中,它可能用于防止在同时修改该变量时出现问题,因为可能需要在同一实例上调用begin()end()

答案 1 :(得分:0)

这是一段有趣的代码。

一种可能性是确保批处理方法的每个调用都属于同一个对象。如果其他一些代码在另一个线程上修改this.batch,一个可能的结果是一些方法调用是一个Batch对象的实例,而其余的调用则转到另一个Batch对象的实例。

另一种可能性是,一些程序员从其他语言中继承了想法和样式(在这种情况下,你必须使用标识符,例如" self"来访问当前实例),在这种情况下,他们可能一直试图避免反复输入this.batch。

我不知道有关代码示例的更多信息,我只能猜测。