hija l-konverżjoni awtomatika ta' Java bejn (, ) u l- tagħhom (, ). Hija konvenjenti iżda għandha pitfalls sottili — overhead tal-performance, imġiba sorprendenti ta' , u riskju ta' .
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
Jigri awtomatikament għaliex collections u generics jeħtieġu objects (ma tistax jkollok List<int>), għalhekk Java ibax primitives b'mod transparent.
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
Dan huwa insidious: == fuq Integer jaħdem għal valuri żgħar (cached) iżda tfalli għal dawk il-kbir — kodiċi li jidher korrett fit-testing jinkiser fil-produzzjoni. Itolbu dejjem .equals() għall-komparazzjoni tal-valuri tal-wrapper, jew ibax il-primitives l-ewwel.
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
L-unboxing ta' null wrapper tarmi NPE — crash komuni u sorprendenti, speċjalment ma' map lookups li jirritorna 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
L-boxing/unboxing ripetut jħolq eċċess ta' objects, ħarrara l-performance f'tight loops.
L-autoboxing huwa konvenjenti u pervasive (collections, generics kollha jiddependu fuqha), iżda l-pitfalls tiegħu jikkawżaw bugs reali, diffiċli biex jiġu dijanjostiċati.
It-trap ta' == huwa speċjalment perikoloż: il-komparazzjoni ta' Integers ma' == taħdem għal valuri żgħar cached (-128 sa 127) iżda faċilment tfalli għal dawk il-kbir — bug li jgħaddi mill-tests u jinkiser fil-produzzjoni — għaliex .equals() (jew unboxing) huwa essenzjali għall-komparazzjoni tal-wrapper. NullPointerExceptions mill-unboxing ta' null wrappers (komuni ma' map lookups) huma crash ieħor frekwenti.
"; U l-boxing f' hot loops joħloq objects mhux meħtieġa, ħarrara l-performance.
L-fehim meta jiġri boxing, il-kwistjoni tal-komparazzjoni value-vs-reference, ir-riskju tal-unboxing null, u l-użu ta' primitives f'kodiċi critiċi għall-performance huwa importanti għall-kitba ta' Java korrett u effiċjenti — u l-imġiba ta' == tal-Integer-cache huwa klassiku mistoqsija ta' interview li turie għarfien profond.