gpt4 book ai didi

java - 使用位移位表示法定义 Java 常量

转载 作者:搜寻专家 更新时间:2023-10-31 19:54:40 24 4
gpt4 key购买 nike

我正在查看 java.util.HashMap 的源代码类并注意到显式无参数构造函数需要两个常量:

/**
* Constructs an empty <tt>HashMap</tt> with the default initial capacity
* (16) and the default load factor (0.75).
*/
public HashMap() {
this(DEFAULT_INITIAL_CAPACITY, DEFAULT_LOAD_FACTOR);
}

但是当我查看 DEFAULT_INITIAL_CAPACITY常数,我发现它的定义如下:

/**
* The default initial capacity - MUST be a power of two.
*/
static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16

我从未在我从事的任何产品中看到过这种类型的构造,并且在 Java Language Specification 中找不到任何结果。或通过谷歌搜索。所以我查看了字节码,但我发现使用16对比1 << 4提供相同的输出,这意味着(至少在我的极简主义情况下)编译器会将后者转换为十进制表示法。两个版本的字节码都包含定义:

javap -c -verbose /---/myClass.class
----
public static final int i;
flags: ACC_PUBLIC, ACC_STATIC, ACC_FINAL
ConstantValue: int 16

因此,我欢迎任何有关此成语的必要性/使用的反馈。

最佳答案

它是完全等价的,但以这种方式编写是为了更清楚地说明值的来源和计算方式——在本例中,它的本意是 2^4。

它可以用任何一种方式编写,作者只是认为这会更加 self 记录。

关于java - 使用位移位表示法定义 Java 常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27761498/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com