Şö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