我注意到HiberSAP 项目的代码(BooleanConverter Linenumber 75)中有一个非常奇怪的行为。
问题是布尔值没有转换为“X”。我已经调试了代码并检查了布尔表达式javaValue == Boolean.TRUE
。此表达式被解释为 false,因为 javaValueBoolean.TRUE
的 ID 为 36,而 Boolean.TRUE 的 ID 为 33(该 ID 显示在 Eclipse IDE 的变量视图中)。我还可以检查所有布尔实例,实际上,有四个 java.lang.Boolean 实例!
有人可以解释一下为什么会这样。
编辑:
好的,我认为我的问题不够精确。应该转换的字段是boolean而不是java.lang.Boolean。这一定是一个类加载器错误。在我的情况下,从布尔值到布尔值的唯一转换是由 JVM 完成的。我知道每个 Object 比较都应该使用 .equals() (并且我填写了一个 Bug),但在这种情况下它应该按原样工作。请参阅以下代码:
public static void main(String[] args) {
for(int i = 0; i < 1000; i++){
print(true);
}
}
public static void print(Object value) {
System.out.println(value);
}
这不应该创建1000 个 java.lang.Boolean 实例。这应该始终使用 java.lang.Boolean.TRUE!这是我无法理解的代码的奇怪行为。
也许这是 Hibersap 进行的反射的副作用?但我认为这不应该成为这种行为的原因。
拜托,我只是想明白。