-1

我正在为我用 Java 制作的游戏加载资产。我的代码中的一些示例行是:

manager.load("game/block.png", Texture.class, param);
manager.load("game/player.png", Texture.class, param);
manager.load("game/point.png", Texture.class, param);
manager.load("game/poison.png", Texture.class, param);
manager.load("game/regen.png", Texture.class, param);

我只是想知道,以上述方式(大约有 20-30 行与此类似)会更快,还是这样:

String ext = ".png";

manager.load("game/player" + ext, Texture.class, param);
manager.load("game/point" + ext, Texture.class, param);
manager.load("game/poison" + ext, Texture.class, param);
manager.load("game/regen" + ext, Texture.class, param);

非常感谢任何答案。

4

2 回答 2

4

如果您创建ext变量final,那么您的编码方式无关紧要,因为编译器会将常量连接起来并将它们放在常量池中(ext如果没有以其他方式引用它,它也会完全删除)。编写更容易阅读和维护的代码。让编译器和 JIT 处理微优化。

例子:

这两个代码片段在编译时生成相同的字节码。

public static void main(String[] args){

    final String ext = ".png";

    load("asset1" + ext);
    load("asset2" + ext);
    load("asset3" + ext);
}

public static void main(String[] args){


    load("asset1.png");
    load("asset2.png");
    load("asset3.png");
}

都生成这个字节码

     0: ldc           #2                  // String asset1.png
     2: invokestatic  #3                  // Method load:(Ljava/lang/String;)V
     5: ldc           #4                  // String asset2.png
     7: invokestatic  #3                  // Method load:(Ljava/lang/String;)V
    10: ldc           #5                  // String asset3.png
    12: invokestatic  #3                  // Method load:(Ljava/lang/String;)V
    15: return
于 2013-10-29T18:54:32.183 回答
-1

版本 2 会更快,但是您几乎无法测量它,因为加载纹理的成本要高出一个数量级。

于 2013-10-29T18:20:18.623 回答