2012-02-28 3 views
16

부울 변수를 선언합니다. 예를 Boolean dataVal=null; 지금 내가 다음 코드 세그먼트를 실행하면 :자바에서 Boolean 객체 및 부울 변수 문제

if(dataVal) 
    System.out.println("\n\NULL value in dataVal: "+dataVal); 
else 
    System.out.println("\n\nvalue in dataVal: "+dataVal); 

내가 NullPointerException이 얻을. 글쎄, 나는 그 명백한 것을 안다. 그러나 나는 이것의 뒤에 이유를 알아야한다.

+0

무슨 이유? 그것의 null 그래서 nullpointerException 그 이유 –

+0

부울 = null; ? Java 문법이 잘못되었습니다. 권리? – Russell

+3

@Russell -'Boolean'은 원시 객체가 아니라 객체입니다. ergo null은 의미가 있습니다. – mcfinnigan

답변

25

를 얻을 수 ... 오토 박싱을 사용하고 있습니다. 따라서 실제 코드는 dataVal.booleanValue()입니다. 그런 다음 NullPointerException을 던집니다. boxed 값을 사용하면 null 객체를 unboxing하면이 예외가 발생합니다.

1.5 전에 손으로 값을 언 박싱했다 : if (dataVal.booleanValue()) 그래서 더 자세한 정보 (더 분명했다 너무 :

14

dataVal 때문에 boolean는 NullPointerException이 당신을 리드 null.booleanValue()로 변환됩니다 Boolean.booleanValue()을 사용하여 주조되고있다.

0

if(null)은 그다지 유효한 표현식이 아닙니다. 후드 아래에서

의 VM은 (1.5 이후, 기능을 오토 박싱) 자바 값을 언 박싱 Boolean 개체의 부울 값을 평가할 때, 그래서 당신은 NullPointerException.

1

부울 (클래스) = 부울 (원시 형)!.

Java는 dataVal.booleanValue()를 호출하는 원시 값을 가져 오려고합니다. dataVal은 null이므로 null 포인터 예외가 발생합니다.

당신은 언 박싱 문제에 대한 사양을 살펴 가질 수
4

, 당신의 상황이 here 섹션 5.1.8 언 박싱 변환 설명 : R가 null의 경우 을, 언 박싱 변환 귀하의 경우 의미는 NullPointerException

가 발생합니다 (/ * Boolean 객체 * /)는 boolean 프리미티브 유형으로 언 박싱되지 않으므로 유효하지 않은 if(null)을 수행 중이므로 NPE를 발생시킵니다. 당신이 있다면

그런데

, 언 박싱 작동합니다 :

final Boolean booleanTest = new Boolean (true); 
if (booleanTest) { 
    // Do something 
}