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 而言,这是一个实现细节。)
此外,如果你使用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
是不可变类型。
给定 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 而言,这是一个实现细节。)
此外,如果你使用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
是不可变类型。