栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Enum#values()是否在每次调用时分配内存?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Enum#values()是否在每次调用时分配内存?

是。

Java没有让我们创建不可修改数组的机制。因此,如果

values()
返回相同的可变数组,我们将冒有人可以为所有人更改其内容的风险。

因此,在将不可修改的数组引入Java之前,为了安全起见,

values()
必须返回包含所有值的新的/分离的数组。

我们可以用

==
运算符来测试它:

MyEnumType[] arr1 = MyEnumType.values();MyEnumType[] arr2 = MyEnumType.values();System.out.println(arr1 == arr2);       //false

如果要避免重新创建此数组,则可以简单地存储它并重用

values()
以后的结果。有几种方法可以做到,例如。

  • 您可以创建私有数组并仅允许通过getter方法访问其内容,例如
        private static final MyEnumType[] VALUES = values();// to avoid recreating array    MyEnumType getByOrdinal(int){        return VALUES[int];    }
  • 您可以将结果存储
    values()
    在不可修改的集合中,
    List
    以确保其内容不会更改(现在这样的列表可以公开)。
        public static final List<MyEnumType> VALUES = Collections.unmodifiableList(Arrays.asList(values()));


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/494871.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号