我正在浏览java.util.HashMap
类代码,发现它MAXIMUM_CAPACITY
的定义如下:
static final int MAXIMUM_CAPACITY = 1 << 30;
是否有任何特定的理由进行这样的初始化而不是直接赋值?
我正在浏览java.util.HashMap
类代码,发现它MAXIMUM_CAPACITY
的定义如下:
static final int MAXIMUM_CAPACITY = 1 << 30;
是否有任何特定的理由进行这样的初始化而不是直接赋值?
首先,它解释了如何选择值 - 2^30(它是 2 的幂,大约是最大 int 值的一半)比 0x40000000 或 1073741824 更有意义。
其次,编译器无论如何都会计算该值。
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;