Autoboxing, ilkel türlerin (int, double vb.) karşılık gelen sarmalayıcı nesnelere (Integer, Double vb.) otomatik olarak dönüştürülmesidir. Unboxing ise sarmalayıcı nesnenin tekrar ilkel tipe dönüştürülmesidir.
Atama, metod argümanları ve koleksiyonlarda otomatik olarak çalışır:
List<Integer> numbers = new ArrayList<>(); numbers.add(5); // Autoboxing örneği: 5 (int) -> Integer(5) int value = numbers.get(0); // Unboxing: Integer(5) -> 5
Riskler:
== (referansla karşılaştırma) ve equals ile zorluklar.Aşağıdaki kodun bir istisna fırlatıp fırlatamayacağını düşünüyor musunuz? Neden?
Integer x = null; int y = x;
Cevap: Kod, int y = x; ifadesi ile null'dan ilkel türe unboxing yapılmaya çalışıldığı için NullPointerException fırlatır; çünkü null, int'e dönüştürülemez.
Hikaye
int kullanmak yerine gerçek sunucuda önemli gecikmelere neden oluyordu.Hikaye
Integer'ı önbellek anahtarı olarak kullandı ve -128...127 aralığındaki değerlerin önbelleğe alındığını, diğerlerinin ise alındığını dikkate almadı. Bu nedenle == ani bir şekilde yanlış sonuçlar vermeye başladı ve sonuç olarak verilerin önbellekten yanlış bir şekilde silinmesine yol açtı.Hikaye
REST API'ye nullable değerler geliyordu. Gelen Integer'ın basit bir unboxing'i, istemciden sayının yerine beklenmedik bir null gelmesi nedeniyle çökmesine neden olabiliyordu.