ใน Java:
int count = (Integer) null;
พ่น java.lang.NullPointerException
เหตุใดจึงไม่โยนข้อยกเว้น Class Cast เพื่อความสะดวกในการทำความเข้าใจโปรแกรมเมอร์
เหตุใดจึงเลือกข้อยกเว้นนี้นอกเหนือจากข้อยกเว้นอื่น ๆ
ใน Java:
int count = (Integer) null;
พ่น java.lang.NullPointerException
เหตุใดจึงไม่โยนข้อยกเว้น Class Cast เพื่อความสะดวกในการทำความเข้าใจโปรแกรมเมอร์
เหตุใดจึงเลือกข้อยกเว้นนี้นอกเหนือจากข้อยกเว้นอื่น ๆ
คำตอบ:
เมื่อรันโค้ดของคุณรันไทม์ Java จะทำสิ่งต่อไปนี้:
กล่าวอีกนัยหนึ่ง null สามารถถูกส่งไปยัง Integer โดยไม่มีปัญหา แต่วัตถุจำนวนเต็ม null ไม่สามารถแปลงเป็นค่าชนิด int ได้
แก้ไข
ผมมีคำถามที่เกี่ยวข้องในขณะที่ที่ผ่านมาที่กองมากเกินดูที่นี่
Java สำเร็จ casts null ให้กับการอ้างอิงจำนวนเต็มซึ่งอ้างอิงว่าไม่มีวัตถุใด ๆ
ไม่เป็นไรเพราะเป็นสถานะที่ไม่ถูกต้องสำหรับการอ้างอิง
เป็นการเรียกวิธีการของวัตถุที่ไม่มีอยู่ซึ่งไม่สามารถทำได้
การแสดง(Integer)null
นั้นเหมือนกับการประกาศตัวแปรจำนวนเต็มจากนั้นไม่สามารถกำหนดอินสแตนซ์อ็อบเจ็กต์ Integer แบบใหม่ (หรือที่มีอยู่แล้ว) ให้ใหม่ได้
เพื่อ unbox Integer
เป็นint
เช่นในint i = new Integer(15);
, i
จริงเท่ากับnew Integer(15).intValue()
i = (Integer) o
; อยู่ที่ไหนObject o = 15
เหมือนกันo = Integer.valueOf(15);
แต่i = null
; พ่นNullPointerException
เพราะi
นั้นเท่ากับ ที่พ่นnull.intValue()
NullPointerException
valueOf()
วิธีการจากโรงงานแทนที่จะสร้างอินสแตนซ์ใหม่สำหรับมวย