Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
比较Java布尔类_Java_Boolean - Fatal编程技术网

比较Java布尔类

比较Java布尔类,java,boolean,Java,Boolean,当我得知将两个布尔对象与==进行比较会得到错误的答案时,我感到震惊 请看下面的测试代码。测试a和测试c给出了一致的答案 测试b失败。新布尔(true)似乎可以创建具有相同值的单独对象,而不是返回对Boolean.true的引用 public static void main(String[] args) { Boolean a = Boolean.TRUE; Boolean b = new Boolean(true); Boolean c = null; b

当我得知将两个布尔对象与==进行比较会得到错误的答案时,我感到震惊

请看下面的测试代码。测试a和测试c给出了一致的答案

测试b失败。新布尔(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        
    */
}

因为
Boolean
是一种引用类型,并且
==
测试它们是否是内存中的同一对象,那么您会得到false,因为您使用
new

分配了
b
?这就是Java的工作方式,不管你喜欢与否。这是真的……那么问题是什么呢?也许可以探索一下为什么你认为调用构造函数会给你带来回报。或者更确切地说,如果要为
Boolean
编写参数化构造函数,您认为如何编写它以返回
Boolean.TRUE
?故事的寓意是,不要创建自己的TRUE和FALSE实例,您需要多少对象来表示TRUE和FALSE?另外,
=
equals()不同。
如果您对Java有合理的了解,您会对
新的布尔值(true)!=新布尔值(true)