JVM 是否专门缓存 Boolean.(TRUE|FALSE)?

Does JVM specifically caches Boolean.(TRUE|FALSE)?

给定 Boolean 值,

Boolean b = getSome();

是下面的表达式

return Boolean.TRUE == b; // possibly false even b.booleanValue() is true?

等于(相当于)到

return Boolean.TRUE.equal(b);

JLS 是否指定关于 Boolean.(TRUE|FALSE) 的任何常量保存?

JLS 说 可能 缓存装箱产生的值的行为。但是,它没有强制执行。 (就 JLS 而言,这是一个实现细节。)

JLS 5.1.7

此外,如果你使用new创建一个Boolean,它是有保证的 你会得到一个新对象。

参见JLS 15.9.4

"The value of a class instance creation expression is a reference to the newly created object of the specified class. Every time the expression is evaluated, a fresh object is created."

例如:

Boolean falze = new Boolean(false);
if (Boolean.FALSE != falze) {
    System.out.println("falze is not FALSE");
}

将打印消息。


Does the JLS specify regarding any constant preservation of Boolean.(TRUE|FALSE)?

JLS 没有提到这些常量。

但是,java.lang.Boolean 的 javadoc 确实提到它们是常量,Boolean 是不可变类型。