Sobes.tech
Middle

Java'da Integer a = 127 ile int b = 127 ve ayrıca Integer a1 = 128 ile int b1 = 128 karşılaştırıldığında ne olur? Karşılaştırma sonuçlarının neden farklı olacağını açıklayın.

sobes.tech yapay zeka

AI'dan gelen yanıt

Integer a = 127 ve int b = 127 karşılaştırıldığında, == operatörü kullanıldığında sonuç true olur. Bu, int b'nin Integer nesnesine otomatik kutulanması (autoboxing) ve 127 değerinin önbelleğe alınmış Integer nesneleri aralığında (varsayılan olarak -128 ile 127 arasında) olmasından kaynaklanır. Java, bu değerler için bir nesne havuzu kullanır, bu nedenle a ve paketlenmiş b aynı nesneye işaret eder.

Integer a1 = 128 ve int b1 = 128 karşılaştırıldığında, == operatörünün sonucu false olur. b1 de otomatik olarak Integer nesnesine paketlenir, ancak 128 değeri önbelleğe alınmış aralık dışında kalır. Bu nedenle, autoboxing sırasında yeni bir Integer nesnesi oluşturulur. a1 ve paketlenmiş b1 farklı nesnelere işaret eder, hatta sayısal değerleri aynı olsa bile.

Nesne sarmalayıcılarının (örneğin Integer) değerlerini karşılaştırmak için equals() yöntemi kullanılmalıdır.

// Değer karşılaştırması
Integer a = 127;
int b = 127;
System.out.println(a == b); // true (autoboxing ve `Integer` önbelleklemesi)
System.out.println(a.equals(b)); // true (değer karşılaştırması)

Integer a1 = 128;
int b1 = 128;
System.out.println(a1 == b1); // false (autoboxing, ancak bu değer için önbellek yok)
System.out.println(a1.equals(b1)); // true (değer karşılaştırması)

Integer a2 = new Integer(127); // yeni nesne oluşturulur, değer önbellekte olsa bile
Integer a3 = new Integer(127);
System.out.println(a2 == a3); // false (farklı nesneler)
System.out.println(a2.equals(a3)); // true (değer karşılaştırması)

Bu nedenle, == nesne referanslarını karşılaştırır, wrapper türleri için, primitive türleri veya wrapper nesnelerinin değerlerini karşılaştırmak için equals() kullanılmalıdır. Integer'ın [-128, 127] aralığında önbelleğe alınması, bu aralıktaki sayılarla yapılan == karşılaştırmasının sonucunu etkiler.