[java] null 부울이 true인지 확인하여 예외가 발생 함

다음 코드가 있습니다.

Boolean bool = null;

try
{
    if (bool)
    {
        //DoSomething
    }
}
catch (Exception e)
{
    System.out.println(e.getMessage());
}

부울 변수 “bool”을 확인한 결과 왜 예외가 발생합니까? 그것이 사실이 아니라고 “보면”if 문을 지나서 바로 뛰어 넘어서는 안됩니까?
if 문을 제거하거나 null이 아닌지 확인하면 예외가 사라집니다.



답변

가 있으면 또는 boolean중 하나 일 수 있습니다 . 그러나 당신이 그것을 가질 때 또는 다른 객체 일 수 있습니다 .truefalseBooleanBoolean.TRUEBoolean.FALSEnull

특정 경우, Booleanis nullif문 은 boolean을 생성 하는 암시 적 변환을 트리거 합니다 NullPointerException. 대신 필요할 수 있습니다.

if(bool != null && bool) { ... }


답변

여분의 null 검사를 원하지 않는 경우 :

if (Boolean.TRUE.equals(value)) {...}


답변

Apache BooleanUtils를 사용하십시오 .

(프로젝트에서 최고 성능이 가장 중요한 우선 순위라면 외부 라이브러리를 포함하지 않아도되는 기본 솔루션에 대한 다른 답변 중 하나를 살펴보십시오.)

바퀴를 재발 명하지 마십시오. 이미 구축 된 것을 활용하고 다음을 사용하십시오 isTrue().

BooleanUtils.isTrue( bool );

반환하여 Boolean처리 하여 값이 true 인지 확인합니다 .nullfalse

당신은 당신이있는 거 “수”를 포함하는 라이브러리로 제한하지 않는 경우를 포함하여 사용 사례의 모든 종류에 대한 좋은 도우미 기능의 무리가 BooleansStrings. 다양한 Apache 라이브러리를 숙독하고 이미 제공되는 것을 살펴보십시오.


답변

Boolean유형은입니다 null. 당신은 할 필요가 null당신이 그것을 설정으로 확인 null.

if (bool != null && bool)
{
  //DoSomething
}                   


답변

또는 Java 8 Optional의 힘으로 다음과 같은 트릭을 수행 할 수도 있습니다.

Optional.ofNullable(boolValue).orElse(false)

🙂


답변

부울은 기본 부울의 객체 래퍼 클래스입니다. 이 클래스는 다른 클래스와 마찬가지로 실제로 null 일 수 있습니다. 성능 및 메모리상의 이유로 항상 기본 요소를 사용하는 것이 가장 좋습니다.

Java API의 랩퍼 클래스는 두 가지 주요 목적을 제공합니다.

  1. 콜렉션에 추가되거나 오브젝트 리턴 값이있는 메소드에서 리턴되는 것과 같이 프리미티브가 오브젝트에 예약 된 활동에 포함될 수 있도록 오브젝트의 프리미티브 값을 “랩핑”하는 메커니즘을 제공합니다.
  2. 프리미티브에 대한 다양한 유틸리티 기능을 제공합니다. 이러한 함수의 대부분은 다양한 변환과 관련되어 있습니다. 기본 요소를 String 오브젝트로 변환하거나 원시, String 오브젝트를 2 진, 8 진 및 16 진수와 같은 다른 기수 (또는 기수)로 변환합니다.

http://en.wikipedia.org/wiki/Primitive_wrapper_class


답변

변수 bool이 null을 가리키면 항상 NullPointerException이 발생하며 먼저 null이 아닌 값으로 변수를 초기화 한 다음 수정해야합니다.