我正在浏览Java中HashMap类的源代码,发现变量被初始化为

static final int MAXIMUM_CAPACITY = 1 << 30;

为什么不只是
static final int MAXIMUM_CAPACITY = 1073741824;

这意味着同一件事。是否有任何性能原因,或者仅仅是花哨的事情?

最佳答案

如果要处理位数,则1 << 30使其比1073741824更明确。

任何性能都不应有差异,因为任何合理的编译器都应在编译时评估表达式。关于它的一切都是不变的,因此没有理由不这样做。

这也使发现打字错误变得更加容易。编写1 << 31 << 20,如果您知道应该是十亿美元左右的错误,那么对任何熟悉二进制的人来说都是显而易见的。编写107377418241073714824而不是1073741824,错误就不那么明显了。

基本上,归结为的偏好设置,在某些情况下(例如位掩码)易于阅读。

07-25 20:25