循环遍历枚举是否会创建新对象?

时间:2016-05-30 18:26:06

标签: java android enums

在我的Android游戏中,我循环遍历每帧多帧的枚举:

for (IngameButton button : IngameButton.values()) {
    // some code
}

内存分配跟踪器显示我正在创建大量对象数组(Object[]

循环遍历枚举,就像将类实例化为类一样?

1 个答案:

答案 0 :(得分:2)

不,当您这样做时,不会创建新的enum值。但是,调用values()会返回包含值 1 的新数组

因此,每次调用values时,都会构造一个新数组,但其内容将始终为同一组值。这就是为什么你看到分配的内存是Object[]而不是IngameButton s。

1 我在规范中找不到任何保证这一点的东西。但是,比较调用返回的值会显示每次都返回新值。如果可以证明数组未被修改,则可能会进行优化以重用它。但这似乎并没有在实践中完成。