以下代码为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/