ใน 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()วิธีการจากโรงงานแทนที่จะสร้างอินสแตนซ์ใหม่สำหรับมวย