การใช้งาน:
(ประเภทตัวแปรอินสแตนซ์ของคลาส | อินเทอร์เฟซ)
ผล:
ตัวดำเนินการ instanceof ใช้เพื่อกำหนดว่าวัตถุก่อนหน้าเป็นอินสแตนซ์ของคลาสต่อไปนี้ หรือคลาสย่อยหรือคลาสการใช้งาน หากเป็นเช่นนั้น ให้คืนค่าเป็นจริง มิฉะนั้น ให้ส่งคืนค่าเท็จ
สังเกต:
・ประเภทเวลาคอมไพล์ของตัวถูกดำเนินการที่อยู่ด้านหน้า instanceof จะเหมือนกับคลาสต่อไปนี้ หรือมีความสัมพันธ์แบบสืบทอดระหว่างพาเรนต์และลูกกับคลาสต่อไปนี้ มิฉะนั้นจะเกิดข้อผิดพลาดในการคอมไพล์
ตัวอย่างง่ายๆ:
คัดลอกรหัสรหัส ดังต่อไปนี้:
-
* อินสแตนซ์ของตัวดำเนินการ
* @ผู้เขียน ผู้ดูแลระบบ
-
-
TestInstanceof ระดับสาธารณะ {
โมฆะคงที่สาธารณะ main (String [] args) {
//ใช้คลาส Object เมื่อประกาศ Hello ดังนั้น Hello ที่คอมไพล์แล้วจะเป็น Object
//คลาสอ็อบเจ็กต์คือคลาสพาเรนต์ของคลาสทั้งหมด แต่ประเภทที่แท้จริงของ Hello คือ String
วัตถุสวัสดี = "สวัสดี";
//String เป็นคลาสย่อยของ Object และสามารถดำเนินการ instanceof การดำเนินการและส่งกลับค่าจริง
System.out.println("เป็นสตริงอินสแตนซ์ของคลาสอ็อบเจ็กต์:"
+ (สวัสดีอินสแตนซ์ของวัตถุ));
//จริง
System.out.println("เป็นสตริงอินสแตนซ์ของสตริง:"
+ (สวัสดีอินสแตนซ์ของ String));
//เท็จ
System.out.println("สตริงเป็นตัวอย่างของคลาส Math:"
+ (สวัสดีตัวอย่างของคณิตศาสตร์));
//String ใช้อินเทอร์เฟซที่เปรียบเทียบได้ ดังนั้นจึงคืนค่าเป็นจริง
System.out.println("เป็นสตริงอินสแตนซ์ของคลาสที่เปรียบเทียบได้:"
+(สวัสดีตัวอย่างของการเปรียบเทียบ));
-
* String ไม่ใช่ทั้งคลาส Math หรือคลาสพาเรนต์ของคลาส Math ดังนั้นโค้ดต่อไปนี้จึงคอมไพล์ไม่ถูกต้อง
-
//String a = "สวัสดี";
//System.out.println("สตริงเป็นตัวอย่างของคลาส Math หรือไม่:"
// + (ตัวอย่างของคณิตศาสตร์));
-
-
ผลการวิ่ง:
คัดลอกรหัสรหัส ดังต่อไปนี้:
ไม่ว่าสตริงจะเป็นอินสแตนซ์ของคลาสอ็อบเจ็กต์: จริงหรือไม่
ไม่ว่าสตริงจะเป็นอินสแตนซ์ของ String: true หรือไม่
ไม่ว่าสตริงจะเป็นอินสแตนซ์ของคลาส Math: false หรือไม่
ไม่ว่าสตริงจะเป็นอินสแตนซ์ของคลาส Comparable: true หรือไม่
โดยปกติก่อนที่จะดำเนินการแปลงประเภทบังคับ จะต้องพิจารณาก่อนว่าออบเจ็กต์ก่อนหน้าเป็นอินสแตนซ์ของออบเจ็กต์หลังหรือไม่ และการแปลงจะสำเร็จหรือไม่ ดังนั้นจึงรับประกันความสมบูรณ์ของโค้ด