기본값 값 Java Integer를 사용하면 NullPointerException이 발생하는 이유는 무엇입니까?
-
19-09-2019 - |
문제
나는 Java를 처음 사용합니다. 방금 Java의 클래스 변수에 기본값이 있다는 것을 읽었습니다.
나는 다음 프로그램을 시도했고 출력을 0
, 정수의 기본값이지만 NullPointerException
.
내가 무엇을 놓치고 있습니까?
class Test{
static Integer iVar;
public static void main(String...args) {
System.out.println(iVar.intValue());
}
}
해결책
귀하는 Java의 초기화되지 않은 클래스 변수에 기본값이 할당되어 있습니다. Integer
Java 유형은 동일하지 않습니다 int
. Integer
원시 유형의 값을 감싸는 래퍼 클래스입니다. int
물체에.
당신의 경우 iVar
에 대한 참조입니다 Integer
초기화되지 않은 대상. 비 초기 참조는 기본값을 가져옵니다 null
그리고 당신이 신청하려고 할 때 intValue
() NULL 참조의 메소드가 NullPointerException
.
이 문제를 완전히 피하려면 참조 변수를 Integer
대상 :
class Test {
// now iVar1 refers to an integer object which wraps int 0.
static Integer iVar1 = new Integer(0);
// uninitialized int variable iVar2 gets the default value of 0.
static int iVar2;
public static void main(String...args) {
System.out.println(iVar1.intValue()); // prints 0.
System.out.println(iVar2); // prints 0.
}
}
다른 팁
그것은 의미합니다 iVar
NULL입니다. Java에서는 Null Reference에서 메소드를 호출 할 수 없으며보고있는 NullPointerException을 생성합니다.
private Integer amount=Integer.valueOf(0);
private Integer points=Integer.valueOf(0);
특히 사용해야하는 이유 Integer.valueOf(int)
새로운 정수 (int) 대신 : 캐싱.
이 변형 valueOf
JDK 5에 바이트, 짧은 정수, 길이가 추가되었습니다 (JDK 1.4 이후 부울의 사소한 경우에 이미 존재했습니다). 물론 이들 모두는 자바의 불변의 물건입니다. 예전에는 INT에서 정수 객체가 필요한 경우 새 정수를 만들었습니다. 그러나 JDK 5+에서는 정수가 이제 -128에서 127 사이의 정수 객체를 캐시하고 새로운 동일한 정수 개체에 객체 구성을 낭비하는 대신 매번 동일한 정확한 정수 (0) 객체를 뒤로 물러날 수 있기 때문에 실제로 가치를 사용해야합니다.