我正在浏览Java中HashMap
类的源代码,发现变量被初始化为
static final int MAXIMUM_CAPACITY = 1 << 30;
为什么不只是
static final int MAXIMUM_CAPACITY = 1073741824;
这意味着同一件事。是否有任何性能原因,或者仅仅是花哨的事情?
最佳答案
如果要处理位数,则1 << 30
使其比1073741824
更明确。
任何性能都不应有差异,因为任何合理的编译器都应在编译时评估表达式。关于它的一切都是不变的,因此没有理由不这样做。
这也使发现打字错误变得更加容易。编写1 << 3
或1 << 20
,如果您知道应该是十亿美元左右的错误,那么对任何熟悉二进制的人来说都是显而易见的。编写10737741824
或1073714824
而不是1073741824
,错误就不那么明显了。
基本上,归结为和的偏好设置,在某些情况下(例如位掩码)易于阅读。