java - boolean 值是否在 Java 中实习?

标签 java jls

以下代码为Integer使用对象实习:

Integer.valueOf("1")

API 文档中不清楚此代码是否为 Boolean还使用内部对象:

Boolean.valueOf("true")

显然,它可能。但它必须这样做吗?

更新

我同意源代码可以解释实际上 发生了什么(顺便说一句,感谢您的回答)。为了使问题不那么琐碎,Java API 规范或 JSL 是否有任何部分告诉必须发生什么?

像这样针对代码提出问题是很自然的:

String str = "true";
if (Boolean.valueOf(str) == Boolean.TRUE) { ... }

结果取决于“对象驻留”是否得到保证。最好完全避免此代码并使用 true 而不是 Boolean.TRUE (而不是在任何规范或来源中查找详细信息),但这是一个正当的理由问题。

注意:事实上,我没有在任何 google 规范中看到 Integer 对象实习的保证。因此,它可能只是一个任何人都不应该依赖的实现细节。

最佳答案

JLS保证:

Integer i = 1;
Boolean b = true;

将使用实习(整数至少在 -128 到 127 之间, boolean 值至少在 true 和 false 之间)。

相关的 javadocs 也保证:

Integer i = Integer.valueOf(1);
Boolean b = Boolean.valueOf(true);

将返回驻留对象。

然而,valueOf(String) 没有这样的明确保证:尽管在您使用的特定实现中是这样,但在不同的 JVM 或 future 版本中可能不是这样.事实上,返回 new Boolean(Boolean.parseBoolean(input)) 的实现是有效的。

关于java - boolean 值是否在 Java 中实习?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37905530/

相关文章:

java - 在另一个框架中单击按钮时,在一个框架上更新 JPanel 的内容

java - 服务器进程将输出发送到node.js?

java - 为什么我的排序代码无法正常工作?

Java - 我们可以从初始化程序中返回吗?

Java 7 交集类型 : what exactly does the specification say?

java - org.eclipse.swt.SWTException : Failed to execute runnable (java. lang.NullPointerException)

java - 从 Web 服务中的 sun-web.xml 获取上下文根

Java 语法 : NonWildcardTypeArguments

java - 通过反射更改最终变量,为什么静态和非静态最终变量之间存在差异

.class 文件的 Java 语言命名约定