我惊讶地发现,将两个布尔对象与==进行比较会得到错误的答案。
查看下面的测试代码。测试a和测试c给出一致的答案。
测试b失败。似乎new Boolean(true)可以创建具有相同值的单独对象,而不是返回对Boolean.TRUE的引用;
public static void main(String[] args) {
Boolean a = Boolean.TRUE;
Boolean b = new Boolean(true);
Boolean c = null;
boolean x = true;
boolean y = false;
System.out.println("Test a");
System.out.println(( a == Boolean.TRUE ) ? "TRUE" : "FALSE");
System.out.println(( Boolean.TRUE.equals(a)) ? "TRUE" : "FALSE");
System.out.println("Test b");
System.out.println(( b == Boolean.TRUE ) ? "TRUE" : "FALSE");
System.out.println(( Boolean.TRUE.equals(b)) ? "TRUE" : "FALSE");
System.out.println("Test c");
System.out.println(( c == Boolean.TRUE ) ? "TRUE" : "FALSE");
System.out.println(( Boolean.TRUE.equals(c)) ? "TRUE" : "FALSE");
/* OUTPUT is
Test a
TRUE
TRUE
Test b
FALSE
TRUE
Test c
FALSE
FALSE
*/
}
答案 0 :(得分:7)
因为Boolean
是引用类型,而==
测试它们是否是内存中的同一个对象,所以你会因为b
分配new
而得到错误。