문제

나는 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) 객체를 뒤로 물러날 수 있기 때문에 실제로 가치를 사용해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top