- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
在查看 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 范围内的值(更多讨论 here 、 here 和许多其他地方)。 Integer.valueOf()
将在其参数表示范围内的数字时从此缓存中返回一个对象。注释警告 parseInt()
不能依赖 valueOf()
因为前者可能在缓存被填充之前被调用。
未指定在这种情况下可能出现的错误行为,并且可以想象在 Java 版本之间可能会有所不同,但可能会返回 null
或异常(NullPointerException
, IndexOutOfBoundsException
, ...) 将被抛出。
无论如何,这是实现中的内部注释,而不是对 Integer
类的用户的注释。当任何用户代码运行时,必要的缓存初始化已经完成,并且可以依赖 Integer.valueOf()
完全像 its API documentation 一样运行。描述。
关于java - 为什么 parseInt 警告使用 valueOf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44636759/
来自 documentation : This method behaves identically to the global function parseInt() 但是,由于它是实验性的,the
这个问题在这里已经有了答案: Javascript parseInt() with leading zeros (7 个答案) 关闭 8 年前。 在IE8中发现了一件奇怪的事情: parseInt(
我对 parseInt 的特定结果感到困惑。我以为我了解它的大部分怪癖,但这一个还不清楚。 parseInt("010", 10); // 10 parseInt(010, 10); // 8,
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: JavaScript function parseInt() doesn't parse numbers w
这个问题纯属好奇。 通过控制台 parseInt(1111111111111111,2) // 16 1's 返回 65535 和 parseInt(11111111111111111,2) // 1
我正在开发一个 Java 项目,将每个整数添加到下一行中的整数,直到文件中没有任何行可供读取。因此,为了能够添加它,我必须在该行中使用 Integer.parseInt(...) 然后添加它。P.S:
在 MDN 的 Number.parseInt部分,它说: The Number.parseInt() method parses a string argument and returns an i
为什么 parseInt('60', 10) 与 parseInt('60', 0) 相同? JavaScript 将 0 基数转换成什么? 最佳答案 来自 MDN ( https://develop
在阅读 JavaScript 中的 NaN 时,我遇到了一些示例。然后我开始进行更多测试,结果让我感到惊讶。例如,我想知道为什么 JavaScript 对下面两个几乎相同的语句的解释不同 parseI
这个问题已经有答案了: 已关闭11 年前。 Possible Duplicate: Workarounds for JavaScript parseInt octal bug 为什么 parseInt
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: Workarounds for JavaScript parseInt octal bug 我认为它与八进制
这个问题在这里已经有了答案: 关闭10 年前。 Possible Duplicate: Workarounds for JavaScript parseInt octal bug 我正在研究 jav
我正在阅读 this但我对 parseInt 中带有基数参数一章的内容感到困惑 为什么是 parseInt(8, 3) → NaN 和 parseInt(16, 3) → 1? AFAIK 8 和 1
我必须构建一个由我构建的一些结构组成的数组: 类(Item)的构建方式如下:(如下所示) 现在我的问题是我试图将从另一个地方(在本例中为列表)获取的一些字符串数字解析为 int。 但我收到此错误: T
我是 Javascript 新手,有一个关于使用 parseInt() 函数将字符串转换为数字的问题。 我通过编写以下代码来练习 parseInt,并在将用户输入从字符串变为数字之前使用 typeof
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: Workarounds for JavaScript parseInt octal bug 我正在解析一个字
我有这个 jQuery 片段,用于从输入字段获取 ID 号 $('table th input').change(function() { var id = $(this).attr('id'
我有这个 JavaScript 文件(Rhino 1.7R4)。 importPackage(java.io); importPackage(java.lang); importPackage(jav
已关闭。这个问题是 not reproducible or was caused by typos 。目前不接受答案。 这个问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-top
当我尝试使用 parseInt(value) 将其转换为 int 时,我有 var value="10+10" ,它给了我 NaN。如果字符串中有特殊字符,他们是否可以选择转换字符串?结果应为 20
我是一名优秀的程序员,十分优秀!