Câu trả lời:
Khi thực thi mã của bạn, thời gian chạy Java thực hiện như sau:
Nói cách khác, null có thể được chuyển thành Integer mà không gặp vấn đề gì, nhưng một đối tượng số nguyên null có thể được chuyển đổi thành giá trị của kiểu int.
CHỈNH SỬA
Tôi đã có một câu hỏi liên quan một lúc trước tại Stack Overflow, xem tại đây .
Java chuyển thành công null thành một tham chiếu Integer tham chiếu không có đối tượng.
Điều đó ổn vì không được xác nhận là trạng thái hợp lệ để tham khảo.
Đó là cách gọi phương thức của một đối tượng không tồn tại không thể thực hiện được.
Việc thực hiện ép kiểu (Integer)null
cũng giống như khai báo biến Integer và sau đó không gán cho nó một thể hiện đối tượng Integer mới (hoặc đã tồn tại).
Để unbox a Integer
thành một int
tức là trong int i = new Integer(15);
, i
thực sự bằng new Integer(15).intValue()
i = (Integer) o
; nơi Object o = 15
giống như o = Integer.valueOf(15);
nhưng i = null
; ném một NullPointerException
vì i
sau đó bằng null.intValue()
mà ném a NullPointerException
.
valueOf()
phương thức xuất xưởng thay vì tạo các cá thể mới cho quyền anh.