gpt4 book ai didi

java - 为什么 parseInt 警告使用 valueOf

转载 作者:IT老高 更新时间:2023-10-28 20:30:03 25 4
gpt4 key购买 nike

在查看 Integer.parseInt(String s, int radix) (java 8, 1.8.0_131) 的源代码时,我发现了以下注释 block :

/*
* WARNING: This method may be invoked early during VM initialization
* before IntegerCache is initialized. Care must be taken to not use
* the valueOf method.
*/

虽然我了解有关 IntegerCache 的第一部分,但我不明白为什么会有关于 valueOf 的警告,以及为什么在这种情况下。

我看到 valueOf() 依赖于 parseInt(),但我仍然不明白为什么会有这个警告。

谁能解释一下评论警告我的确切内容(以及不应使用 valueOf 的上下文),以及可能出错的地方。

编辑:

Integer.valueOf(int i) 中的代码似乎已经改变,因为下面评论中的另一个问题被问到了,现在是

public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}

并且应该从之前的断言错误中保存。

最佳答案

Can someone explain what exactly the comment warns me about (and the context where valueOf shouldn't be used), and what could possibly go wrong.

Integer 类创建并维护代表小整数值的 Integer 对象的缓存;默认情况下,涵盖 -128 到 127 范围内的值(更多讨论 herehere 和许多其他地方)。 Integer.valueOf() 将在其参数表示范围内的数字时从此缓存中返回一个对象。注释警告 parseInt() 不能依赖 valueOf() 因为前者可能在缓存被填充之前被调用。

未指定在这种情况下可能出现的错误行为,并且可以想象在 Java 版本之间可能会有所不同,但可能会返回 null 或异常(NullPointerException, IndexOutOfBoundsException, ...) 将被抛出。

无论如何,这是实现中的内部注释,而不是对 Integer 类的用户的注释。当任何用户代码运行时,必要的缓存初始化已经完成,并且可以依赖 Integer.valueOf() 完全像 its API documentation 一样运行。描述。

关于java - 为什么 parseInt 警告使用 valueOf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44636759/

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