0Pricing
Java Academy · Pelajaran

Tipe Primitif vs Tipe Referensi

Pahami perbedaan mendasar antara tipe primitif dan tipe referensi di Java.

Tipe Primitif vs Tipe Referensi adalah pelajaran Java Academy gratis di CoddyKit. Ini adalah pelajaran 1 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.

Tipe Primitif vs Tipe Referensi

Java memiliki dua kategori dasar tipe data: tipe primitif dan tipe referensi. Memahami perbedaannya sangat penting untuk menulis kode Java yang benar dan efisien.

Delapan Tipe Primitif

Java memiliki tepat delapan tipe primitif:

  • byte (bilangan bulat 8-bit)
  • short (bilangan bulat 16-bit)
  • int (bilangan bulat 32-bit)
  • long (bilangan bulat 64-bit)
  • float (bilangan desimal 32-bit)
  • double (bilangan desimal 64-bit)
  • char (karakter Unicode 16-bit)
  • boolean (true/false)

Primitif menyimpan nilainya langsung di memori—tanpa beban tambahan objek.

int age = 25;
double price = 19.99;
boolean active = true;
char grade = 'A';
long population = 8_000_000_000L;

System.out.println(age);       // 25
System.out.println(price);     // 19.99
System.out.println(active);    // true

Tipe Referensi

Tipe referensi menyimpan alamat memori (referensi) yang menunjuk ke objek di timbunan. Ini mencakup:

  • Kelas (misalnya, String, Scanner)
  • Larik (misalnya, int[])
  • Antarmuka
  • Enumerasi dan rekaman

Variabel tidak menyimpan objeknya—variabel menyimpan penunjuk ke objek tersebut.

String name = "Alice";       // reference to a String object
int[] scores = {90, 85, 92}; // reference to an array object

// name holds a reference, not the characters directly
System.out.println(name.length());   // 5
System.out.println(scores.length);   // 3

Memori Tumpukan vs Timbunan

Variabel primitif disimpan di tumpukan—memori yang cepat dan berumur pendek, terkait dengan pemanggilan metode.

Objek tipe referensi berada di timbunan—memori yang lebih besar dan berumur panjang, dikelola oleh pengumpulan sampah. Referensi (alamat) itu sendiri berada di tumpukan.

// Stack: holds the int value directly
int x = 42;

// Stack: holds reference; Heap: holds the Person object
class Person {
    String name;
    int age;
}

Person p = new Person(); // p is a reference on stack, object on heap
p.name = "Bob";
p.age = 30;

null: Referensi yang Tidak Ada

Variabel referensi dapat diberi nilai null, yang berarti variabel tersebut tidak menunjuk ke objek mana pun. Primitif tidak dapat bernilai null—primitif selalu memiliki nilai.

Mengakses referensi null menyebabkan NullPointerException (NPE)—salah satu kesalahan saat Java dijalankan yang paling umum.

String s = null;
// int n = null; // Compile error — primitives can't be null

try {
    System.out.println(s.length()); // NullPointerException!
} catch (NullPointerException e) {
    System.out.println("Caught NPE: reference was null");
}

Semantik Penyalinan: Primitif

Saat Anda menetapkan variabel primitif ke variabel lain, Java menyalin nilainya. Mengubah salah satunya tidak memengaruhi yang lain—keduanya sepenuhnya independen.

int a = 10;
int b = a;  // b gets a copy of the value 10

b = 20;     // changing b does NOT affect a

System.out.println(a); // 10
System.out.println(b); // 20

Semantik Penyalinan: Referensi

Saat Anda menetapkan variabel referensi ke variabel lain, kedua variabel menunjuk ke objek yang sama. Perubahan pada objek melalui salah satu referensi akan terlihat melalui referensi lainnya.

int[] arr1 = {1, 2, 3};
int[] arr2 = arr1; // arr2 points to the SAME array

arr2[0] = 99; // modifies the shared array

System.out.println(arr1[0]); // 99 — arr1 sees the change too!
System.out.println(arr2[0]); // 99

Kelas Pembungkus: Membungkus Primitif

Setiap primitif memiliki kelas pembungkus yang sesuai dalam java.lang:

  • int → Integer
  • double → Double
  • boolean → Boolean
  • char → Character

Kelas pembungkus memungkinkan Anda menggunakan primitif sebagai objek—hal ini diperlukan untuk koleksi seperti List<Integer>.

Integer boxed = Integer.valueOf(42); // explicit boxing
int unboxed = boxed.intValue();       // explicit unboxing

// Autoboxing / auto-unboxing (Java does this automatically)
Integer auto = 100;  // autoboxed
int val = auto;      // auto-unboxed

System.out.println(Integer.MAX_VALUE);  // 2147483647
System.out.println(Double.MIN_VALUE);   // 5.0E-324

Perangkap Pembungkusan Otomatis

Pembungkusan otomatis memang praktis, tetapi dapat menyebabkan bug yang sulit terlihat. Integer menyimpan nilai dari -128 hingga 127 dalam tembolok—di luar rentang tersebut, == membandingkan referensi, bukan nilai.

Selalu gunakan .equals() untuk membandingkan objek pembungkus.

Integer a = 127;
Integer b = 127;
System.out.println(a == b);      // true (cached)

Integer c = 200;
Integer d = 200;
System.out.println(c == d);      // false (different objects!)
System.out.println(c.equals(d)); // true (correct comparison)

Meneruskan ke Metode: Berdasarkan Nilai

Java selalu menggunakan penerusan berdasarkan nilai. Untuk primitif, nilainya disalin. Untuk referensi, referensi (alamatnya) disalin—keduanya menunjuk ke objek yang sama, tetapi Anda tidak dapat menetapkan ulang variabel pemanggil dari dalam metode.

static void doubleValue(int n) {
    n = n * 2; // only modifies the local copy
}

static void clearArray(int[] arr) {
    arr[0] = 0; // modifies the shared object
}

int x = 5;
doubleValue(x);
System.out.println(x); // still 5

int[] nums = {10, 20, 30};
clearArray(nums);
System.out.println(nums[0]); // 0 — object was mutated

Tabel Ringkasan Praktis

Referensi singkat untuk membandingkan tipe primitif dan tipe referensi:

  • Penyimpanan: primitif → nilai di tumpukan; referensi → alamat di tumpukan + objek di timbunan
  • Nilai bawaan: primitif → 0/false/\u0000; referensi → null
  • Dapat bernilai null: primitif → Tidak; referensi → Ya
  • Yang disalin saat penugasan: primitif → nilai; referensi → alamat
  • Dalam koleksi: primitif memerlukan kelas pembungkus

Pemeriksaan Singkat

Apa yang terjadi saat Anda menjalankan kode berikut?

Integer x = 200;
Integer y = 200;
System.out.println(x == y);

Rangkuman: Tipe Primitif vs Tipe Referensi

Poin utama dari pelajaran ini:

  • Java memiliki 8 tipe primitif yang disimpan langsung di tumpukan
  • Tipe referensi menyimpan alamat objek di timbunan; variabel menyimpan alamat tersebut
  • Primitif disalin berdasarkan nilai; referensi disalin berdasarkan alamat
  • Variabel referensi dapat bernilai null; primitif tidak dapat
  • Kelas pembungkus (Integer, Double, dan lainnya) membungkus primitif sebagai objek
  • Java selalu menggunakan penerusan berdasarkan nilai—bahkan saat meneruskan referensi

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Tipe Primitif vs Tipe Referensi” gratis?

Ya — teks lengkap “Tipe Primitif vs Tipe Referensi” 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 “Tipe Primitif vs Tipe Referensi”?

Pahami perbedaan mendasar antara tipe primitif dan tipe referensi di Java. 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 1 dari 4.

Berapa lama pelajaran “Tipe Primitif vs Tipe Referensi” 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