Integer mı kullanmalıyım yoksa int mi?

Java‘ya yeni başlayan arkadaşların kafası, int ve Integer tanımları nedeniyle genellikle ilk başlarda karışır. Bu iki kavram arasındaki farkı tam anlamıyla öğrenebilmek için, Java’ya yeni başlayan arkadaşlara tavsiyem, Java diline temel seviyede giriş bilgileri içeren bir doküman ya da kitap okumaları olacaktır. Ben burada temel olarak bu iki kavram arasındaki farkı detaylarına girmeden anlatmaya çalışacağım.

Bu arda bu yazımda yazdığım tüm faklılıklar, char ve Character, short ve Short, long ve Long, float ve Float, double ve Double kavramları için de geçerlidir.

Java dilinde int, primitive tipte bir veri yapısıdır, bir nesne değildir. Bir int -2,147,483,648 [-231] ile (Integer.MIN_VALUE), +2,147,483,647 [2 31-1] (Integer.MAX_VALUE) değerler arasındaki sayılar ile yüksek performanslı işlemler gerçekleştirebilmenize olanak tanır. Bir int 32 bitlik veri taşıyan ve değeri değişebilir (mutable) değişkenlerdir. Final olarak işarelemediğiniz sürece bir int değişkeninin değerini herhangi bir anda değiştirebilirsiniz.

Buna karşılık Integer içerisinde bir int değeri taşıyan bir nesnedir. Integer nesnelerin değeri değişmez (immutable). Bir Integer nesnesine ait bir değeri değiştirmenin tek yolu, yeni bir Integer nesnesi oluşturmaktır. Java’ya yeni başlayan arkadaşlar için hemen burada bir açıklama yapalım. Madem Integer nesnelerinin değeri değişmiyor, o halde aşağıdaki gibi bir şeyi nasıl yapabiliyoruz? diye sorabilirler, haklı olarak…

Integer a=3; 
Integer b=3; 
a+=b; 
System.out.println(a);

Yukarıdaki kod çalıştırıldığında, a nesnesine ait değerin 6 olduğu ve herşeyin sorunsuz bir şekilde çalıştığı görülecektir. Bir önceki paragrafta söylediğimiz şey doğru ise, yani Integer nesneleri immutable ise, peki yukarıdaki işlemi nasıl gerçekleştirebiliyoruz? a nesnesine ait değerin b nesnesine ait değer ile toplandığını ve değerinin değiştiğini görüyoruz? Değil mi?

Hayır, gerçekte olan şey, yukarıdaki örnekte herbir işlem için yeni bir Integer nesnesi otomatik olarak oluşturulur. Dolayısıyla yukarıdaki durum, değeri değiştirilemez Integer nesneleri için gayet normal bir akıştır.

Integer ve int arasındaki temel farkları verdik, şimdi ise asıl can alıcı soruya gelelim. Peki hangisi daha iyi? Bu soruya da basit bir tablo ile cevap vermeye çalışayım. Aşağıdaki tablo çeşitli durumlar için, int mi yoksa Integer mı kullanılması gerektiğini göstermektedir.

DURUMintInteger
+, -, *, %, / vs. gibi hesaplama işlemlerinde kullanmak istiyorum
Parametre olarak kullanmak istiyorum
Bir geri dönüş değeri olarak kullanmak istiyorum
Üzerinde java.lang.Integer nesnesinden metotlar kullanmak istiyorum
Bir vektörde ya da bir kolleksiyonda saklamak istiyorum
Bir hash tablosunda anahtar (key) olarak kullanmak istiyorum
Serileştirme (serialization) işleminde kullanmak istiyorum
RMI ile kullanmak istiyorum
RMI içerisinde başka bir nesnesin parçası olarak kullanmak istiyorum
Generic bir nesne olarak kullanmak istiyorum
Null değerlere izin vermek istiyorum

Java 1.5 ile, kutulama (boxing) ve kutuyu açma (unboxing) kavramları oluşturulmuştur. Bu iki özelliğin sağladığı autoboxing (otomatik kutulama) ile de int ve Integer arasındaki dönüşümler otomatik olarak yapılmaktadır. Elbette bu iki kavram arasındaki kullanım farklılıklarından doğan ve göz ardı edilebilecek düzeydeki performans etkilerini dikkate almazsak, autoboxing biz yazılım geliştirciler için hayat kurtaran bir özellik olarak karşımıza çıkıyor.

Selamlar…

, , , , , , , , ,

No comments yet.

Bir Cevap Yazın

Font Resize