答案 1
直接从文档中提取
Enums often require more than twice as much memory as static constants. You should strictly avoid using enums on Android.
http://developer.android.com/training/articles/memory.html#Overhead
编辑:
也是罗曼·盖伊(Roman Guy)的一次演讲中的幻灯片
答案 2
int 上的操作比枚举上的操作快很多倍。
自己判断。每次创建枚举时,您至少要创建:
1) Class-loader for it.
2) You keep this object in memory.
3) Since enum is static anonymous class - it will always hang in your memory (sometimes even after you close the application.)
关于 .在此类中,标志主要用于比较,并将结果返回到上面的类 ()。但基本上,如果你深入研究Android SDK的肠道,你会发现几乎所有这些标志都被用来进行旁班操作。Service
ContextWrapper
即使在Java中,在JDK中使用二进制移位操作:
/**
* Max capacity for a HashMap. Must be a power of two >= MINIMUM_CAPACITY.
*/
private static final int MAXIMUM_CAPACITY = 1 << 30;
你也可以在Android SDK中查看Window类
/**
* Set the container for this window. If not set, the DecorWindow
* operates as a top-level window; otherwise, it negotiates with the
* container to display itself appropriately.
*
* @param container The desired containing Window.
*/
public void setContainer(Window container) {
mContainer = container;
if (container != null) {
// Embedded screens never have a title.
mFeatures |= 1<<FEATURE_NO_TITLE;
mLocalFeatures |= 1<<FEATURE_NO_TITLE;
container.mHasChildren = true;
}
}
/** The default features enabled */
@SuppressWarnings({"PointlessBitwiseExpression"})
protected static final int DEFAULT_FEATURES = (1 << FEATURE_OPTIONS_PANEL) |
(1 << FEATURE_CONTEXT_MENU);
所以原因有两个(至少):
更少的内存消耗。
由于按位操作,工作速度更快。
推荐
-
-
自由标记:如何使用枚举作为键循环访问 Map 下面的代码不起作用,因为 Freemarker 似乎将 [] 中的表达式的值强制转换为 String,然后将其用作键,这不是实际预期的。 准备模板模型: 在,描述了如何访问Enum本身,但我没有找到有关如何
-
泛型和类<?extendes Enum<?>>, EnumSet.allOf(class) vs class.getEnumConstants() 我有以下BeanValidation代码,可以正常工作,并允许验证Bean是否注释:
-
编译错误 - 带枚举的开关 嗨,有人知道为什么当我切换枚举时,情况应该在不合格的枚举值上吗? 例: 是合法的。 我知道var是特定类型(Enum),但是为什么编译器关心我是否使用Enum值的完全限定名
-