2015-01-01 3 views
1

누구나 Java가 왜 NullPointerException을 던지나요? Float을 반환 getSomeFloat이상한 NullPointerException이 삼원 조건식

Float x = <some condition> ? myObject.getSomeFloat() : 0.0f; 
  • 방법.
  • 0.0f에서 new Float(0)으로 변경하면 문제가 없습니다.
+0

myobject가 null입니까? 또는 <일부 조건>의 일부 객체가 null 일 수 있습니다. – SMA

답변

5

이 삼항 연산자의 유형은 float입니다. 따라서 myObject.getSomeFloat()이 null을 반환하는 경우 <some condition>이 true이고 이 호출되면 Floatfloat으로 변환하면 NullPointerException이 발생합니다.

JLS 15.25 :

번째 및 세 번째 피연산자 중 하나는 원시 타입 T이며, 다른 하나의 유형은 T 박싱 변환 (§5.1.7)을 적용한 결과이면을 조건부 식의 유형은 T입니다.

귀하의 경우에는 기본 유형이 float이고 그 박스형 버전은 Float입니다. 따라서 조건식의 유형은 프리미티브 유형 - float입니다.

+1

@almasshaikh 아니, 틀렸어. 'Float x = true'를 시도해보십시오. (Float) null : 0.0f; System.out.println (x);'임의의 'null'참조는 같은 시나리오가 아닙니다. – Eran

+0

와우, 그건 반 직관적이야. (+1) – NPE

+0

이 답변은 정확합니다. - getSomeFloat() 메소드는 null을 반환해야합니다. 이것은 자동 unboxed ... boom입니다. 다른 값을'Float'으로 바꾸면 자동 unbox가되지 않습니다. – Bohemian