我将通过Java中的HashMap
类的源代码,并发现变量初始化为
static final int MAXIMUM_CAPACITY = 1 << 30;
为什么不只是
static final int MAXIMUM_CAPACITY = 1073741824;
这意味着同样的事情。有任何表演原因还是仅仅是一种奇特的东西?
答案 0 :(得分:11)
如果您正在使用位数,1 << 30
使其比1073741824
更明确。
应该没有任何性能差异,因为任何合理的编译器都应该在编译时评估表达式。关于它的一切都是不变的,所以没有理由不这样做。
它还可以更容易地发现拼写错误;写1 << 3
或1 << 20
,如果你知道它应该是十亿的数量,这个错误对任何熟悉二进制文件的人都是显而易见的;写10737741824
或1073714824
而不是1073741824
,错误就不那么明显了。
基本上,它归结为是一个偏好的问题,在某些情况下(例如位掩码)易于阅读。
答案 1 :(得分:3)
这里没有性能影响,因为编译器会进行所有计算。它完成的唯一原因是可读性:很容易看出1 << 30
是30的幂的两个;不是每个人都可以通过查看相同数字1073741824
的小数表示来得出相同的结论。
请注意,十六进制文字也可以:
0x40000000 // same as 1 << 30
通常,每当处理位模式时,将它们显示为移位和OR的组合(十六进制或八进制文字)会更方便,因为这些文字与二进制表示紧密对齐。在头脑中将它们转换为二进制文件要容易得多,因为你需要一次处理一个数字。
答案 2 :(得分:0)
没有。与1,073,741,824(这似乎是一些随机数)相比,它的编写方式更容易阅读和理解。
数字1&lt;&lt;选择30是因为hashCode()返回一个int。