android 为什么谷歌官方不建议在项目中使用 Enum
来源:互联网 发布:wifi无线鼠标软件 编辑:程序博客网 时间:2024/04/28 16:06
今天看到一个面试题 就是关于这个的 本来第一反应就是 占内存呀 ,,但是为什么占内存还是 自己也说不出个所以然来 还是太菜了呀 所以在这里详细记录一下 为什么占内存
在日常开发中 我们都使用过 判断语句 没错判断语句但我们一般都会使用常量或者枚举(enum) 就像下面这样
- 示例代码 使用常量
public class Main { private static final DEFAULE_FLAG = 0; private static final MAX_FLAG = 2; public static void main(String[] args) { judge(2); } private static void judge(int flag) { if (flag == DEFAULE_FLAG ) { System.out.println("DEFAULE_FLAG ---- >") }else if(flag == MAX_FLAG) { System.out.println("MAX_FLAG ---- >") } }}
- 使用枚举
public class Main { public static void main(String[] args) { judge(FlagValue.MAX_FLAG); } private static void judge(FlagValue flag) { if (flag == FlagValue.DEFAULE_FLAG) { System.out.println("DEFAULE_FLAG ---- >"); }else if(flag == FlagValue.MAX_FLAG) { System.out.println("MAX_FLAG ---- >"); } }}enum FlagValue{ DEFAULE_FLAG, MAX_FLAG}
在effect java中说过 用枚举(enum)来代替常量是一个非常安全的方法 但是对于这么一个安全的方法 谷歌官方为什么不建议使用呢,下面我们使用 javac来反编译 使用枚举的代码
- 首先使用 javac 将代码反编译为class文件 然后再用 javap来将class文件反编译得到一个FlagValue的class文件
- 然后再次使用 javap 反编译 FlagValues.class 就可以看到 如下代码
我们可以看到 枚举实际上用的这些代码 下面我们可以看到这些代码
final class FlagValue extends java.lang.Enum<FlagValue> { public static final FlagValue DEFAULE_FLAG; public static final FlagValue MAX_FLAG; public static FlagValue[] values(); public static FlagValue valueOf(java.lang.String); static {};}
我们知道使用enum耗费内存 现在我们通过这个代码来算一下 光是一个 数组对象的对象头就占用24个字节 一个对象的引用就是八个字节 我们都知道一个 int 值只有四个字节,,,所以相比较的话 使用enum(枚举)肯定会更加浪费内存的所以大家在android开发中都尽量不要使用enum来进行开发
2 0
- android 为什么谷歌官方不建议在项目中使用 Enum
- android 为什么不建议使用Enum
- android 为什么不建议使用Thread.stop()
- Android性能优化—不建议使用枚举Enum
- Android性能优化—不建议使用枚举Enum
- Android性能优化—不建议使用枚举Enum
- 在SQL Server中为什么不建议使用Not In子查询
- 在SQL Server中为什么不建议使用Not In子查询
- 项目中为什么不建议用jdbc操作数据库
- sql server中为什么不建议使用not in
- ios 人为抛出异常 --- 但不建议在项目中频繁使用
- 不要(不建议)在Angular项目中使用hidden属性
- 为什么项目中不使用jquerymobile
- Android 项目中使用 的 优化建议
- scala中为什么不建议用return
- 为什么不建议使用css @import
- 为什么不建议使用vector<bool>
- Hadoop 为什么不建议使用 RAID?
- Java实现模拟发送POST、GET请求
- [UVA-11971]
- 快速排序2
- (转)Android EditText的设置
- bus error与segment error
- android 为什么谷歌官方不建议在项目中使用 Enum
- Adblock plus 过滤规则
- Working with Generators of Python
- 1008. Elevator (20)
- UVA
- 1011. World Cup Betting (20)
- selenium webdriver 启动三大浏览器Firefox,Chrome,IE
- Java实现链表的插入,删除,排序,输出
- 灰度发布集群服务进行生产环境的日志打印调试