Operator instanceof
Gunakan instanceof untuk memeriksa tipe objek sebelum melakukan casting dan menghindari ClassCastException.
Operator instanceof adalah pelajaran Java Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Java Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Java Academy mencakup 4 pelajaran total.
Operator instanceof
Operator instanceof memeriksa apakah suatu objek merupakan instance dari tipe tertentu saat program berjalan. Operator ini mengembalikan true atau false dan mencegah ClassCastException sebelum konversi tipe dilakukan.
Penggunaan Dasar instanceof
Gunakan instanceof untuk menguji tipe suatu objek saat program berjalan sebelum melakukan konversi tipe yang aman.
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 merupakan instance dari kelas tersebut atau subkelas mana pun (atau antarmuka apa pun yang diimplementasikannya).
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); // falsePencocokan Pola instanceof (Java 16+)
Java 16 memperkenalkan pencocokan pola untuk instanceof: Anda dapat mendeklarasikan variabel pengikat dalam ekspresi yang sama sehingga konversi tipe eksplisit tidak diperlukan.
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
}Pencocokan Pola dalam Metode
Pencocokan pola membuat pemilihan berdasarkan tipe menjadi rapi dan aman. Variabel pengikat hanya berada dalam ruang lingkup saat kondisi diketahui bernilai 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 selalu mengembalikan false dan tidak pernah melempar kesalahan. Dengan demikian, instanceof menjadi cara yang aman terhadap null untuk melakukan pemeriksaan sebelum konversi tipe.
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
}Ekspresi Switch dan Pencocokan Pola
Java 21 memperluas pencocokan pola ke ekspresi switch, sehingga pengalihan berdasarkan tipe dapat dilakukan dengan rapi 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 konversi tipe tanpa pemeriksaan terlebih dahulu menyebabkan ClassCastException saat program berjalan—kesalahan umum dalam kode lama yang dapat dicegah oleh pencocokan pola.
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");
}Praktik: Memproses List Campuran
Contoh penggunaan dalam situasi nyata: memproses list objek heterogen menggunakan pencocokan pola.
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 Tersegel dan Pencocokan Menyeluruh
Kelas tersegel (Java 17+) membatasi kelas yang dapat mewarisinya. Jika digabungkan dengan switch pencocokan pola, kompiler dapat memverifikasi bahwa semua kemungkinan telah ditangani—kasus default 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
}
}Pola dengan Penjaga
Pencocokan pola mendukung penjaga dengan when (Java 21) untuk menambahkan kondisi boolean bersama pemeriksaan tipe.
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: 7Pemeriksaan Cepat
Apa yang dikembalikan oleh ekspresi berikut?
Object obj = null; boolean result = obj instanceof String; System.out.println(result);
Ringkasan: Operator instanceof
Inti pembelajaran:
- instanceof memeriksa tipe saat program berjalan dan mencegah ClassCastException
- Mengembalikan false untuk null—tidak pernah melempar NPE
- Mengembalikan true untuk kelas itu sendiri dan semua subkelas atau antarmukanya
- Pencocokan pola instanceof di Java 16+: if (x instanceof String s) menggabungkan pemeriksaan dan konversi tipe
- Switch dengan pola di Java 21 mengalihkan pemrosesan berdasarkan tipe dengan rapi dan mendukung penjaga opsional
- Kelas tersegel dan switch menyeluruh menghilangkan kebutuhan akan kasus default
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Operator instanceof” gratis?
Ya — teks lengkap “Operator instanceof” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Java Academy, upgrade ke CoddyKit PRO. Kursus Java Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Operator instanceof”?
Gunakan instanceof untuk memeriksa tipe objek sebelum melakukan casting dan menghindari ClassCastException. Kamu berlatih Java Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Java Academy?
Tidak diperlukan pengalaman sebelumnya. Java Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.
Berapa lama pelajaran “Operator instanceof” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Java Academy ini?
Ya. Setiap pelajaran Java Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Tipe Primitif vs Tipe Referensi
- Konversi Pelebaran dan Penyempitan
- Operator instanceof
- Casting Tipe dalam Praktik