android 为什么谷歌官方不建议在项目中使用 Enum

今天看到一个面试题 就是关于这个的 本来第一反应就是 占内存呀 ,,但是为什么占内存还是 自己也说不出个所以然来 还是太菜了呀 所以在这里详细记录一下 为什么占内存

在日常开发中 我们都使用过 判断语句 没错判断语句但我们一般都会使用常量或者枚举(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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值