Operator instanceof
Gunakan instanceof untuk menyemak jenis objek sebelum melakukan penukaran dan mengelakkan ClassCastException.
Operator instanceof ialah pelajaran Java Academy percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Java Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Java Academy merangkumi sejumlah 4 pelajaran.
Operator instanceof
Operator instanceof menyemak sama ada objek ialah tika bagi jenis tertentu semasa pelaksanaan. Operator ini mengembalikan true atau false dan mencegah ClassCastException sebelum penukaran jenis dilakukan.
Penggunaan Asas instanceof
Gunakan instanceof untuk menguji jenis objek semasa pelaksanaan sebelum melakukan penukaran jenis yang selamat.
Object obj = "Hello, Java!";
if (obj instanceof String) {
String s = (String) obj;
System.out.println(s.toUpperCase()); // HELLO, JAVA!
}
Object num = Integer.valueOf(42);
System.out.println(num instanceof Integer); // true
System.out.println(num instanceof String); // falseinstanceof dengan Pewarisan
instanceof mengembalikan true jika objek ialah tika bagi kelas tersebut atau mana-mana subkelas (atau mana-mana antara muka yang dilaksanakan).
class Animal {}
class Dog extends Animal {}
class Cat extends Animal {}
Animal a = new Dog();
System.out.println(a instanceof Animal); // true
System.out.println(a instanceof Dog); // true
System.out.println(a instanceof Cat); // falsePadanan Corak instanceof (Java 16+)
Java 16 memperkenalkan padanan corak untuk instanceof: anda boleh mengisytiharkan pemboleh ubah pengikatan dalam ungkapan yang sama, sekali gus menghapuskan penukaran jenis secara eksplisit.
Object shape = "circle";
// Old way
if (shape instanceof String) {
String s = (String) shape;
System.out.println(s.length());
}
// New way (Java 16+) — binding variable 's' is in scope
if (shape instanceof String s) {
System.out.println(s.length()); // 6
}Padanan Corak dalam Kaedah
Padanan corak menjadikan pemilihan berdasarkan jenis lebih kemas dan selamat. Pemboleh ubah pengikatan hanya berada dalam skop apabila syarat diketahui benar.
sealed interface Shape permits Circle, Rectangle {}
record Circle(double radius) implements Shape {}
record Rectangle(double width, double height) implements Shape {}
static double area(Shape s) {
if (s instanceof Circle c) {
return Math.PI * c.radius() * c.radius();
} else if (s instanceof Rectangle r) {
return r.width() * r.height();
}
throw new IllegalArgumentException("Unknown shape");
}
System.out.println(area(new Circle(5))); // 78.53...
System.out.println(area(new Rectangle(4, 6))); // 24.0instanceof dengan null
null instanceof AnyType sentiasa mengembalikan false — ia tidak pernah mencetuskan pengecualian. Ini menjadikan instanceof cara yang selamat terhadap null untuk membuat semakan sebelum penukaran jenis.
String s = null;
System.out.println(s instanceof String); // false (not NPE)
Object o = null;
if (o instanceof Number n) {
System.out.println(n.intValue());
} else {
System.out.println("Not a number (or null)"); // prints this
}Ungkapan switch dan Padanan Corak
Java 21 melanjutkan padanan corak kepada ungkapan switch, membolehkan penghalaan berdasarkan jenis yang kemas tanpa rangkaian if-else.
static String describe(Object obj) {
return switch (obj) {
case Integer i -> "Integer: " + i;
case Double d -> "Double: " + d;
case String s -> "String of length " + s.length();
case null -> "null value";
default -> "Unknown: " + obj.getClass().getSimpleName();
};
}
System.out.println(describe(42)); // Integer: 42
System.out.println(describe(3.14)); // Double: 3.14
System.out.println(describe("hello")); // String of length 5
System.out.println(describe(null)); // null valueClassCastException tanpa instanceof
Melakukan penukaran jenis tanpa semakan terlebih dahulu menyebabkan ClassCastException semasa pelaksanaan — pepijat biasa dalam kod legasi yang boleh dicegah oleh padanan corak.
Object obj = "I am a String";
try {
Integer i = (Integer) obj; // ClassCastException!
} catch (ClassCastException e) {
System.out.println("Cannot cast String to Integer");
}
// Safe version
if (obj instanceof Integer i) {
System.out.println("Is integer: " + i);
} else {
System.out.println("Not an integer");
}Amali: Memproses Senarai Campuran
Kes penggunaan sebenar: memproses senarai objek heterogen menggunakan padanan corak.
import java.util.List;
List<Object> events = List.of(
"User login", 42, 3.14, "Payment processed", 100
);
double numericSum = 0;
for (Object e : events) {
if (e instanceof Integer n) numericSum += n;
else if (e instanceof Double d) numericSum += d;
else if (e instanceof String s) System.out.println("Log: " + s);
}
System.out.printf("Numeric sum: %.2f%n", numericSum); // 145.14Kelas Bersegel dan Padanan Menyeluruh
Kelas bersegel (Java 17+) mengehadkan kelas yang boleh melanjutkannya. Apabila digabungkan dengan switch padanan corak, pengompil boleh mengesahkan kelengkapan semua kes — kes lalai tidak diperlukan.
sealed interface Notification permits EmailNotification, SmsNotification {}
record EmailNotification(String to, String body) implements Notification {}
record SmsNotification(String phone, String text) implements Notification {}
static void send(Notification n) {
switch (n) {
case EmailNotification e ->
System.out.println("Email to " + e.to() + ": " + e.body());
case SmsNotification s ->
System.out.println("SMS to " + s.phone() + ": " + s.text());
// no default needed — compiler knows all cases are covered
}
}Corak Berpengawal
Padanan corak menyokong pengawal dengan when (Java 21) untuk menambah syarat boolean bersama-sama semakan jenis.
static String classify(Number n) {
return switch (n) {
case Integer i when i < 0 -> "negative int: " + i;
case Integer i when i == 0 -> "zero";
case Integer i -> "positive int: " + i;
case Double d -> "double: " + d;
default -> "other number";
};
}
System.out.println(classify(-5)); // negative int: -5
System.out.println(classify(0)); // zero
System.out.println(classify(7)); // positive int: 7Semakan Pantas
Apakah yang dikembalikan oleh ungkapan berikut?
Object obj = null; boolean result = obj instanceof String; System.out.println(result);
Imbas Kembali: Operator instanceof
Kesimpulan utama:
- instanceof menyemak jenis semasa pelaksanaan dan mencegah ClassCastException
- Mengembalikan false untuk null — tidak pernah mencetuskan NPE
- Mengembalikan true untuk kelas itu sendiri serta semua subkelas dan antara mukanya
- Padanan corak Java 16+: if (x instanceof String s) menggabungkan semakan dan penukaran jenis
- switch Java 21 dengan corak menghalakan aliran mengikut jenis dengan pengawal pilihan
- Kelas bersegel + switch menyeluruh menghapuskan keperluan untuk kes lalai
Pelajari Java dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 104
- Pelajaran
- 374
Soalan Lazim
Adakah pelajaran “Operator instanceof” percuma?
Ya — teks penuh “Operator instanceof” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Java Academy, tingkat taraf kepada CoddyKit PRO. Kursus Java Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Operator instanceof”?
Gunakan instanceof untuk menyemak jenis objek sebelum melakukan penukaran dan mengelakkan ClassCastException. Anda berlatih Java Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Java Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Java Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.
Berapa lamakah pelajaran “Operator instanceof” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Java Academy ini?
Ya. Setiap pelajaran Java Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Jenis Primitif berbanding Rujukan
- Penukaran Pelebaran dan Penyempitan
- Operator instanceof
- Penukaran Jenis dalam Amalan