2017-09-12 95 views
-3

我必须比较两个Boolean包装彼此。因此,我想知道他们是否平等。如何比较Java中的两个布尔值?

这是我想出了:

public static boolean areEqual(final Boolean a, final Boolean b) { 
    if (a == b) { 
     return true; 
    } 

    if (a != null && b != null) { 
     return a.booleanValue() == b.booleanValue(); 
    } 

    return false; 
} 

是否有更好的和/或短的方式来正确地比较两个Boolean包装的平等?

首先,我想使用Object.equals()Boolean.compareTo(),但两种方式最终都可能在NullPointerException之间,对吧? 也许有些东西我在这里看不到,这就是为什么我问。

+0

你最好写代码,使你的布尔值_不能为空(或者如果他们是,你的代码失败,NPE出来,因为这将是一个错误)。然后你可以将它们与一个理智的人比较。 – pvg

+0

检查这[问题](https://stackoverflow.com/questions/31366231/how-to-check-if-two-boolean-values-are-equal) – Laf

+0

@pvg我必须使用布尔包装,这就是问题。 – winklerrr

回答

7

你可以得到最短,与空安全(工作自然地成为实现equals()任何其他对象):

java.util.Objects.equals(a, b); 
+0

事实上,在这里最好的答案是,当其中一个值变为NULL时,结果将是错误的,这是OP显然在寻找的。 –

+0

正是我在找的东西!谢谢。最后是仔细阅读问题的人。 – winklerrr

+0

找到一篇关于这个确切的新功能的好文章(https://baptiste-wicht.com/posts/2010/04/java-7-the-new-java-util-objects-class.html)在Java7中 – winklerrr

1

没有必要为你推倒重来。

如果您使用的是Java 7或更高版本,请使用java.util.Objects类(如Kayaman所述)。

如果您使用较早版本的java,请使用Apache BooleanUtils类。 尝试谷歌搜索“apache booleanutils”以了解如何获取它。

编辑:更正的java版本。

+0

如果我使用比Java 7更早的版本,我会将您的答案标记为正确答案,因为它涵盖了更多方案。 – winklerrr

-2

它正在为我工​​作。

public class MyClass { 
    public static void main(String args[]) { 
    Boolean x=true; 
    Boolean y=true; 
    System.out.println(compare(x,y)); // true 
    x=false; 
    y=true; 
    System.out.println(compare(x,y)); // false 
    x=true; 
    y=false; 
    System.out.println(compare(x,y)); // false 
    x=false; 
    y=false; 
    System.out.println(compare(x,y)); // true 
    x=null; 
    y=null; 
    System.out.println(compare(x,y)); // true 
    } 
    public static boolean compare(final Boolean a, final Boolean b) { 
    if (a == null || b == null) { 
     return a == b; 
    } 
    return a.equals(b); 
    } 
} 

探头,https://www.jdoodle.com/online-java-compiler

编辑:添加例外NULL值。

+1

它的工作原理是因为你使用原始的布尔值而不是它们的包装。你必须注意'b' vs'B':'boolean' vs'布尔布尔' – winklerrr

+0

我可以很容易地用'Boolean.booleanValue()'完成投射,但我知道,但是这仍然会抛出'NullPointerException',因此需要比实际演员多。 – winklerrr

+0

是在这个https://stackoverflow.com/questions/3728616/boolean-vs-boolean-in-java – juusechec