• Cum. Ara 3rd, 2021

Şöyle bir kodumuz olduğunu düşünelim:

public static void main(String[] arr) {
    Integer num1 = 100;
    Integer num2 = 100;
    Integer num3 = 500;
    Integer num4 = 500;

    if (num1 == num2) {
        System.out.println("num1 == num2");
    } else {
        System.out.println("num1 != num2");
    }
    if (num3 == num4) {
        System.out.println("num3 == num4");
    } else {
        System.out.println("num3 != num4");
    }
}

Sizce bu kodun çıktısı ne olur?

a) num1 == num2
    num3 == num4
b) num1 != num2
    num3 == num4
c) num1 != num2
    num3 != num4
d) num1 == num2
    num3 != num4

Cevap

Bu sorunun doğru cevabı d şıkkı olacaktır arkadaşlar. Çünkü metot içerisinde primitive int yerine class olan Integer kullanılmış. Bu durumda == operatörü değer kontrolünden ziyade referans kontrolüne odaklanacaktır. num3 != num4 ifadesinin ekrana basılacak olması bu nedenden kaynaklanmaktadır. Peki o zaman bu kural baz alındığında num1==num2 nasıl ekran basılacaktır? Bu Java’nın integer üzerinde üzerinde uyguladığı caching yapısından kaynaklanmaktadır. Java integer üzerinde -128 ile 127 arasındaki değerler için caching uygular ve num1 ile num2 hem aynı değere sahip oldukları hem de bu aralığa girdikleri için Java aynı referans noktasını ikisine de atayacaktır.

Bu nedenle sorumuzun doğru cevabı num1 == num2 ve num3 != num4 çıktıları olacaktır.

Başka bir yazıda görüşene kadar sağlıcakla kalın. Selam ve Sevgilerimle

Merhaba! Ben İlkay Günel :) İstanbul Üniversitesi Bilgisayar Mühendisliği 2016 mezunuyum. Güncel olarak Paycore'da SoftPOS projesinde Java Developer olarak çalışmaktayım. Büyük oranda Java teknolojileri ile uğraşıp kendimi geliştirmeye çalışıyorum ve bu mecrada öğrendiklerimi sizle paylaşmaya da çabalıyorum :) Hakkımda biraz daha detaylı bilgi için: http://www.ilkaygunel.com/about/

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir