我正在研究java.util.HashMap类代码,发现MAXIMUM_CAPACITY的定义如下:
static final int MAXIMUM_CAPACITY = 1 << 30;是否有任何特定的理由像这样初始化而不是分配直接的值?
发布于 2013-09-16 20:25:10
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-16 20:19:39
首先,它解释了如何选择- 2^30 (等于2的幂,大约是最大int值的一半)比0x40000000或1073741824之类的值更有意义。
第二,编译器无论如何都会计算值。
https://stackoverflow.com/questions/18836389
复制相似问题