当我阅读ConcurrentHashMap源代码时,我遇到了许多位移运算符。一些应用于创建常量,一些应用于变量。
static final int MAXIMUM_CAPACITY = 1 << 30;
static final int MAX_SEGMENTS = 1 << 16; // slightly conservative
long u = (((h >>> segmentShift) & segmentMask) << SSHIFT) + SBASE;
我不理解,如果像MAXIMUM_CAPACITY这样的常量可以直接声明,那么使用位移运算符有什么用呢。
1 << 30
的二进制表示是1000000000000000000000000000000
,从某种程度上看,它看起来比十进制的1073741824
更“简单”。 - Mena