作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
假设您有一个“简单的”枚举:
public enum Day {
SUNDAY, MONDAY, TUESDAY, WEDNESDAY,
THURSDAY, FRIDAY, SATURDAY
}
然后你在某处使用它:
Day day = Day.SUNDAY;
...
if(day==Day.SUNDAY) {...}
这与使用整数相比在性能方面(内存和时间)如何?
int day = Day.SUNDAY;
...
public class Day {
public static final int SUNDAY=0;
public static final int MONDAY=1;
}
我们启用了 JIT HotSpot 编译器以及其他“标准”优化。
最佳答案
每当您引用 Day.SUNDAY 时,枚举的性能可能会略有下降,因为 int
常量是一个编译时常量,因此可以内联,而 enum
常量需要 getstatic
。
比较两个整数或两个引用在所需时间方面当然是相同的,因为您是在比较引用(地址),而不是调用 .equals()
。
当然,这里的性能影响很小;担心这一点的唯一原因是,如果这是在您的应用程序的性能关键部分,并且分析表明使用 int 更好。枚举在可维护性和代码正确性方面的好处远远超过像这样的轻微低效。
关于Java HotSpot 枚举开销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21167417/
我是一名优秀的程序员,十分优秀!