在我的Android游戏中,我循环遍历每帧多帧的枚举:
for (IngameButton button : IngameButton.values()) {
// some code
}
内存分配跟踪器显示我正在创建大量对象数组(Object[]
)
循环遍历枚举,就像将类实例化为类一样?
答案 0 :(得分:2)
不,当您这样做时,不会创建新的enum
值。但是,调用values()
会返回包含值 1 的新数组。
因此,每次调用values
时,都会构造一个新数组,但其内容将始终为同一组值。这就是为什么你看到分配的内存是Object[]
而不是IngameButton
s。
1 我在规范中找不到任何保证这一点的东西。但是,比较调用返回的值会显示每次都返回新值。如果可以证明数组未被修改,则可能会进行优化以重用它。但这似乎并没有在实践中完成。