Java’da Integer Havuzu ve Getirdiği Problemler

Java’da Integer kullanırken dikkat etmek gereklidir. Hatta Kullanmadan önce düşünmek de gereklidir. Bunun sebebi Autoboxingin düzgün çalışmaması dolayısıyladır. Peki nedir problem ve nasıl çözülür başlayalım

Öncelikle Java’da Integer değerler pratikte birbiri ile == vasıtasıyla karşılaştırılabilir. Autoboxing dolayısıyla bir problem ile karşılaşmadan sonlanacağını düşünürsünüz ve yanılırsınız. Karşılaştığınız şey açıkca bir referans karşılaştırmasıdır. Referansları karşılaştırır ve doğru değeri döndürür. Yani == kullanmak için intValue() metodunu kullanmalısınız yani şu şekilde:

Integer a = 555;
Integer b = 555;
boolean deger1 = a == b; //Bunu değil
boolean deger2 = a.intValue() == b.intValue(); //Bunu Kullanmalısınız

Ancak bazen ilginç bir şekilde == operatorü düzgün çalışıyor görünmektedir. Bunun sebebi ise Java dilinin -128 ile 127(enfazla) arasındaki değerleri bir önbellekten (cache) almasıdır. Bu değeri önbellekten aldığı için aynı nesneyi almaktadırlar ve doğal olarak aynı nesneyi getirmektedirler. Bu sebeble == ile true yanıtını alabilmekteyiz. Örnek vermek gerekirse:

Integer a = 44;
Integer b = 44;
boolean deger1 = a == b; //true

Aslında cache denilen şey de 256 (en fazla)bitlik bir arrayden Integer dizisinden başka bir değildir. Cache’deki ilk değer -128'i son değer ise +127'yi temsil etmektedir. Çok basit bir implementasyonu vardır çok karmaşık zekice veya programcıların sevdiği şekilde basit değildir ancak işini görmektedir bu önbellek (cache) mekanizması.

Computer Engineer,Sociologist, CSE Master Student

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store