Jebakan Autoboxing
Unboxing null dan jebakan ==
Jebakan Autoboxing adalah pelajaran Java Academy gratis di CoddyKit. Ini adalah pelajaran 4 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.
Kemudahan Dapat Menjadi Jebakan
Pembungkusan otomatis membuat kode lebih rapi, tetapi menyembunyikan konversi yang dapat menyebabkan kesalahan tak terduga. Dua jebakan terbesar adalah pembukaan nilai null dan perbandingan identitas dengan ==.
Pelajaran ini menunjukkan cara menghindari keduanya.
Jebakan Pembukaan Nilai Null
Jika pembungkus menyimpan null dan Anda membukanya menjadi tipe primitif, Java menimbulkan NullPointerException.
Hal ini mudah terlewatkan karena kodenya terlihat seperti penetapan nilai sederhana.
public class Main {
public static void main(String[] args) {
Integer maybe = null;
try {
int value = maybe;
System.out.println(value);
} catch (NullPointerException e) {
System.out.println("Cannot unbox null!");
}
}
}Nilai Null dalam Operasi Aritmetika
Jebakan ini juga dapat muncul di dalam ekspresi. Menambahkan pembungkus bernilai null akan membukanya terlebih dahulu, sehingga pengecualian muncul bahkan sebelum perhitungan dijalankan.
public class Main {
public static void main(String[] args) {
Integer count = null;
try {
int total = count + 5;
System.out.println(total);
} catch (NullPointerException e) {
System.out.println("Null in arithmetic!");
}
}
}Mencegah Nilai Null
Selalu periksa pembungkus untuk null sebelum membukanya, atau berikan nilai bawaan.
public class Main {
public static void main(String[] args) {
Integer maybe = null;
int safe = (maybe != null) ? maybe : 0;
System.out.println(safe);
}
}Kejutan Penyimpanan Sementara pada ==
Integer.valueOf menyimpan sementara nilai dari -128 hingga 127. Jadi, dua nilai yang dibungkus dalam rentang tersebut dapat berbagi objek yang sama, dan == menghasilkan nilai benar.
public class Main {
public static void main(String[] args) {
Integer a = 100;
Integer b = 100;
System.out.println(a == b);
}
}Di Luar Rentang Penyimpanan Sementara
Di atas rentang penyimpanan sementara, setiap pembungkusan membuat objek yang berbeda. Kini == membandingkan referensi dan menghasilkan nilai salah meskipun angkanya sama.
public class Main {
public static void main(String[] args) {
Integer a = 200;
Integer b = 200;
System.out.println(a == b);
}
}Selalu Gunakan equals
Karena == pada pembungkus membandingkan identitas objek, Anda harus menggunakan .equals() untuk membandingkan nilai numerik sebenarnya.
public class Main {
public static void main(String[] args) {
Integer a = 200;
Integer b = 200;
System.out.println(a.equals(b));
}
}Mencampur == dengan Tipe Primitif
Jika salah satu sisi == adalah tipe primitif, Java membuka bungkusnya secara otomatis, sehingga perbandingan dilakukan berdasarkan nilai. Cara ini dapat diandalkan, tetapi tetap dapat menimbulkan kesalahan jika pembungkusnya bernilai null.
public class Main {
public static void main(String[] args) {
Integer a = 200;
int b = 200;
System.out.println(a == b);
}
}Pembungkusan Tersembunyi dalam Perulangan
Mendeklarasikan akumulator perulangan sebagai pembungkus akan membuat objek baru pada setiap iterasi. Pada contoh berikut, menggunakan Long alih-alih long akan melakukan pembungkusan berulang kali. Sebaiknya gunakan tipe primitif.
public class Main {
public static void main(String[] args) {
long sum = 0;
for (int i = 0; i < 1000; i++) {
sum += i;
}
System.out.println(sum);
}
}Map.get Mengembalikan Nilai Kosong
Kesalahan yang umum terjadi di dunia nyata: Map.get mengembalikan null untuk kunci yang tidak ditemukan. Membuka hasil tersebut secara otomatis ke dalam int akan menimbulkan kesalahan. Gunakan getOrDefault sebagai gantinya.
import java.util.HashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) {
Map<String, Integer> scores = new HashMap<>();
int score = scores.getOrDefault("missing", 0);
System.out.println(score);
}
}Tetap Aman
Dua kebiasaan dapat mencegah sebagian besar kesalahan pembungkusan otomatis: jangan pernah membuka nilai secara otomatis jika nilainya mungkin null, dan selalu bandingkan nilai pembungkus dengan .equals(), bukan ==.
Pemeriksaan Singkat
Uji pemahaman Anda tentang jebakan pembungkusan otomatis.
Ringkasan
Anda telah mempelajari jebakan utama pembungkusan otomatis:
- Membuka pembungkus
nullsecara otomatis akan menimbulkanNullPointerException - Lindungi dengan pemeriksaan null atau nilai bawaan
==pada pembungkus membandingkan referensi, dengan penyimpanan sementara dari -128 hingga 127- Selalu gunakan
.equals()untuk perbandingan nilai - Gunakan
getOrDefaultuntuk menghindari null dari pencarian pada peta
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Jebakan Autoboxing” gratis?
Ya — teks lengkap “Jebakan Autoboxing” 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 “Jebakan Autoboxing”?
Unboxing null dan jebakan == 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 4 dari 4.
Berapa lama pelajaran “Jebakan Autoboxing” 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.