yaiku konversi otomatis Java antarane (, ) lan ne (, ). Iki nyenengake nanging nduweni pitfall sing halus — overhead kinerja, tingkah laku sing nggumgunake, lan risiko .
intdoubleIntegerDouble==NullPointerExceptionInteger boxed = 42; // autoboxing: int → Integer (Integer.valueOf(42))
int unboxed = boxed; // auto-unboxing: Integer → int (boxed.intValue())
List<Integer> nums = new ArrayList<>();
nums.add(5); // autoboxes int 5 → Integer (collections need objects)
int x = nums.get(0); // auto-unboxes Integer → int
Iki dadi otomatis amarga collections lan generics butuh objects (yen ora bisa duwe List<int>), mula Java ngotak-atik primitives kanthi transparan.
Integer a = 1000;
Integer b = 1000;
a == b; // ❌ FALSE — different Integer OBJECTS (reference comparison)
a.equals(b); // ✅ true — value comparison
// the WORSE trap — the Integer cache makes small values seem to work:
Integer c = 100, d = 100;
c == d; // TRUE — Java CACHES Integers from -128 to 127 (same object)
Integer e = 200, f = 200;
e == f; // FALSE — outside the cache range → different objects
Iki insidious: == ing Integer obah kanggo nilai cilik (cached) nanging gagal kanggo nilai gedhe — kode sing katon bener ing testing pecah ing production. Tansah gunakna .equals() kanggo perbandingan nilai wrapper, utawa unbox dadi primitives dhisik.
Integer value = null; // a wrapper can be null
int x = value; // 💥 NullPointerException — unboxing null calls null.intValue()
Map<String, Integer> map = new HashMap<>();
int count = map.get("missing"); // 💥 NPE — get() returns null, then unboxing fails
Unboxing wrapper null nyetak NPE — crash sing umum lan nggumgunake, utamane kanthi map lookups sing bali null.
// ❌ autoboxing in a hot loop — creates millions of Integer objects (GC pressure, slow)
Long sum = 0L; // WRONG type — wrapper
for (long i = 0; i < 1_000_000; i++) {
sum += i; // unbox, add, re-box → new Long each iteration!
}
// ✅ use primitives in hot paths
long sum = 0L; // primitive — no boxing
Boxing/unboxing berulang nggawe objects sing akeh, nggugu kinerja ing tight loops.
Autoboxing nyenengake lan meluas (collections, generics kabeh gumantung ing iki), nanging pitfallne nyebabake bugs sing nyata lan angel diagnosa.
Trapé == utamane mbahayani: mbandingi Integer kanthi == obah kanggo nilai cilik cached (-128 kanggo 127) nanging sengaja gagal kanggo values gedhe — bug sing lulus tests lan pecah ing production — nggawa .equals() (utawa unboxing) essential kanggo perbandingan wrapper. NullPointerExceptions saka unboxing null wrappers (umum kanthi map lookups) minangka crash sing sering tadi.
Lan boxing ing hot loops nggawe objects sing ora perlu, nggugu kinerja.
Ngerti kapan boxing dadi, masalah perbandingan value-vs-reference, risiko null-unboxing, lan gunakna primitives ing kode critical-kinerja penting kanggo nulis Java sing bener lan efficient — lan tingkah laku == integer-cache yaiku pertanyaan interview klasik sing mbukak pemahaman jero.