Boolean.TRUE == myBoolean vs. Boolean.TRUE.equals(myBoolean)

后端 未结 4 1323
执笔经年
执笔经年 2021-02-08 08:51

Is there ever a situation where using equals(Boolean) and == would return different results when dealing with Boolean objects?

<         


        
相关标签:
4条回答
  • 2021-02-08 09:27

    == only works for primitive types
    when you compare Objects you should always use o.equls(Object ob)

    0 讨论(0)
  • 2021-02-08 09:31

    How about:

    System.out.println(new Boolean(true) == new Boolean(true));
    System.out.println(new Boolean(true) == Boolean.TRUE);
    

    (both print false, for the same reason as any other type of objects).

    0 讨论(0)
  • 2021-02-08 09:33

    It would be dangerous to use == because myBoolean may not have originated from one of the constants, but have been constructed as new Boolean(boolValue), in which case == would always result in false. You can use just

    myBoolean.booleanValue()
    

    with neither == nor equals involved, giving reliable results. If you must cater for null-values as well, then there's nothing better than your equals approach.

    0 讨论(0)
  • 2021-02-08 09:40
    if (Boolean.TRUE == new Boolean(true)) {
        System.out.println("==");
    }
    
    if (Boolean.TRUE.equals(myBoolean)) {
        System.out.println("equals");
    }
    

    In this case first one is false. Only second if condition is true.

    It Prints:

    equals

    0 讨论(0)
提交回复
热议问题