我在this link查看了HashMap.java的源代码。
我遇到了几段这样的代码:
static final int DEFAULT_INITIAL_CAPACITY = 1<< 4; //又名16
和
static final int MAXIMUM_CAPACITY = 1<< 30;
我的问题是,如果这些值必须硬编码,为什么不对评估值进行硬编码而不是这些左移运算符呢?
答案 0 :(得分:2)
要强调的是,它们是2的幂,必须是2的幂,并且是写2的幂的简单方法。
从Java 8上的源代码:
/**
* The default initial capacity - MUST be a power of two.
*/
static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16
/**
* The maximum capacity, used if a higher value is implicitly specified
* by either of the constructors with arguments.
* MUST be a power of two <= 1<<30.
*/
static final int MAXIMUM_CAPACITY = 1 << 30;
答案 1 :(得分:1)
任何好的编译器都会在编译时评估这些表达式,这样的表达式更易于人们阅读和理解。
答案 2 :(得分:0)
在这种情况下向你展示2的力量。