0Pricing
Java Academy · Pelajaran

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);  // false

instanceof 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);    // false

Pencocokan 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.0

instanceof 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 value

ClassCastException 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.14

Kelas 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: 7

Pemeriksaan 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

  1. Tipe Primitif vs Tipe Referensi
  2. Konversi Pelebaran dan Penyempitan
  3. Operator instanceof
  4. Casting Tipe dalam Praktik
← Kembali ke Java Academy