比较Java布尔类

时间:2012-01-12 20:15:34

标签: java boolean

我惊讶地发现,将两个布尔对象与==进行比较会得到错误的答案。

查看下面的测试代码。测试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        
    */
}

1 个答案:

答案 0 :(得分:7)

因为Boolean是引用类型,而==测试它们是否是内存中的同一个对象,所以你会因为b分配new而得到错误。