Java'da Autoboxing ve Unboxing

2013-04-13 08:46:20


Java'da tipler referans ve primitive olmak üzere ikiye ayrılır. Referans tipleri class, interface veya array tiplerinden oluşur. Java'da 8 tane de primitive tip vardır. Bunlar; boolean, char, byte,  short, int, long, float ve double'dır. Her primitive tipe karşılık gelen bir referans tipi mevcuttur. 

Primitive TipReferans Tipi
booleanBoolean
charCharacter
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble

Boolean, Character, Byte,Short, Integer, Long, Float ve Double sınıfları Wrapper Class olarak geçer.

Compiler tarafından primitive tipten referans tipine dönüşüm yapılması işlemine autoboxing; referans tipinden primitive tipe dönüşüm işlemine ise unboxing denir.



Aşağıda autoboxing ve unboxing işlemlerini gösteren bir kod parçası verilmiştir. Integer bekleyen bir ArrayList'e int eklenmiştir. Bu ekleme işlemi sırasında int otomatik olarak Integer nesnesine dönüştürülür ve listeye eklenir.  List interface'indeki add ve get metodlarının tanımlarına bakarsak şu şekilde olduğunu görürüz:

boolean java.util.List.add(Integer e)
Integer java.util.List.get(int index)

ArrayList'den get metodu ile bir Integer alıp int değişkene atarsak da compiler tarafından otomatik olarak unboxing yapılır.

List<Integer> intList = new ArrayList<>();		
int i = 4;
intList.add( i ); //autoboxing		
int j = intList.get( 0 ); //unboxing

Compilerın yaptığı işlem aslında aşağıdakine eşittir.

List<Integer> intList = new ArrayList<>();		
int i = 4;
intList.add( Integer.valueOf( i ) ); 	
int j = intList.get( 0 ).intValue();