请参阅以下代码:
enum ChunkIndex {
ZeroIndex = 0,
SpecializedIndex = ZeroIndex,
SmallIndex = SpecializedIndex + 1,
MediumIndex = SmallIndex + 1,
HumongousIndex = MediumIndex + 1,
NumberOfFreeLists = 3,
NumberOfInUseLists = 4
};
ChunkIndex index0 = (ChunkIndex) (0);
ChunkIndex index3 = (ChunkIndex) (3);
ChunkIndex index4 = (ChunkIndex) (4);
您会看到至少存在两个等于0的枚举值。
与3相同。
将0转换为枚举ChunkIndex时会发生什么?
与3相同的问题。
上面的代码来自jdk8 / openjdk / hotspot / src / share / vm / memory / metaspace.cpp第83行及其7行以上。
答案 0 :(得分:2)
[严格来说是关于C ++]
你将使0-converted-to-enum值与枚举的0值匹配
ChunkIndex index0 = (ChunkIndex) (0);
if(index0 == ChunkIndex::ZeroIndex)
cout << "hello"; // Gets printed
if(index0 == ChunkIndex::SpecializedIndex)
cout << "world"; // Gets printed
这对C ++ 11类型安全枚举
也有效enum class ChunkIndex
作为PaulR noted,枚举通常是语法糖来呈现整数值(无论它们的价值如何)对读者更有意义。