12

Tôi mới sử dụng Java. Tôi chỉ đọc các biến lớp trong Java có giá trị mặc định.Tại sao sử dụng kết quả Java Integer có giá trị mặc định trong NullPointerException?

Tôi đã thử chương trình sau và mong muốn nhận được kết quả là 0, là giá trị mặc định trên một số nguyên, nhưng tôi nhận được NullPointerException.

Tôi đang thiếu gì?

class Test{ 
    static Integer iVar; 

    public static void main(String...args) { 
     System.out.println(iVar.intValue()); 
    } 
} 
+0

Câu hỏi hay! Một bản mix rất dễ. –

Trả lời

22

Bạn đúng, các biến lớp chưa được khởi tạo trong Java có giá trị mặc định được gán cho chúng. Integer loại trong Java không giống như int. Integer là lớp bao bọc bao bọc giá trị của kiểu nguyên thủy int trong một đối tượng.

Trong trường hợp của bạn iVar là tham chiếu đến đối tượng Integer chưa được kích hoạt. Tham chiếu uninitialized nhận giá trị mặc định của null và khi bạn cố gắng áp dụng phương thức intValue() trên tham chiếu null, bạn nhận được NullPointerException.

Để tránh vấn đề này hoàn toàn bạn cần phải thực hiện biến tham chiếu của bạn đề cập đến một đối tượng Integer như:

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. 
} 
} 
+0

Cảm ơn codaddict. Nó có ý nghĩa bây giờ. – user292844

1

Nó có nghĩa là iVar là null. Trong java, bạn không thể gọi các phương thức trên tham chiếu null, nó tạo ra NullPointerException mà bạn đang thấy.