1

我正在浏览java.util.HashMap类代码,发现它MAXIMUM_CAPACITY的定义如下:

static final int MAXIMUM_CAPACITY = 1 << 30;

是否有任何特定的理由进行这样的初始化而不是直接赋值?

4

2 回答 2

2

首先,它解释了如何选择值 - 2^30(它是 2 的幂,大约是最大 int 值的一半)比 0x40000000 或 1073741824 更有意义。
其次,编译器无论如何都会计算该值。

于 2013-09-16T20:19:39.680 回答
1

1 << 30是 2 的最大幂,可以存储为有符号 32 位整数中的正值。想必这就是作者想要表达的。从替代的 0x4000000 甚至十进制表示中我们很难看到这个特性。

javadoc 注释基本上已经说明了这一点:

/**
 * 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;
于 2013-09-16T20:25:10.733 回答