2017-09-12 1 views
-3

2 개의 Boolean 래퍼를 서로 비교해야합니다. 결과적으로 나는 그들이 동등한 지 아닌지 알고 싶습니다.자바에서 두 개의 부울을 비교하는 방법은 무엇입니까?

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

부울이 null이 될 수 없도록 코드를 작성하는 것이 좋습니다 (버그 일 경우 코드가 실패하고 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"에 대한 google 검색을 시도해보십시오.

편집 : 수정 된 java 버전.

+0

Java 7 이전 버전을 사용하는 경우 더 많은 시나리오를 다루기 때문에 답변을 올바른 것으로 표시합니다. – winklerrr

-2

나를 위해 일하고있다. https://www.jdoodle.com/online-java-compiler

편집과

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); 
    } 
} 

프로브 : 값을 null로 예외를 추가 할 수 있습니다.

+1

래퍼가 아닌 원시 부울을 사용하기 때문에 효과가 있습니다. 'B''''''''''''''''''''''''''''''''''Boolean'''''''''' Boolean''에 대해서는주의를 기울여야 만합니다. – winklerrr

+0

''Boolean.booleanValue()'를 이용하여 쉽게 형변환을 할 수 있습니다.하지만 여전히 NullPointerException이 발생하므로 필요합니다. 실제 캐스팅보다. – winklerrr

+0

예 https://stackoverflow.com/questions/3728616/boolean-vs-boolean-in-java – juusechec

관련 문제