Java'da null'un ne anlama geldiğini anlamak için sayılarla bir analojiye bakalım: 0 sayısı bir şeyin yokluğunu sembolize eder ve referans veri türleri söz konusu olduğunda null aynı anlama gelir. Referans türündeki bir alana ( String , Object veya StringBuilder gibi ) açıkça bir değer atanmamışsa, ilkel türlerle benzer şekilde, varsayılan bir değer alır ve bu değer null olur :

kod Konsol çıkışı
public class Solution {

    public static int i;
    public static String s;

    public static void main(String[] args) {
        System.out.println(i);
        System.out.println(s);
    }
}
0
boş

Ancak şöyle bir dizi bildirirseniz:

String[] strings = new String[12];

12 öğe içeren bir dizi oluşturulacak ve bunların tümü null olacaktır :

kod Konsol çıkışı
public class Solution {
    public static void main(String[] args) {
        String[] strings = new String[12];

        for (int i = 0; i < strings.length; i++) {
            System.out.println("Element " + i + ":" + strings[i]);
        }
    }
}
Öğe 0: null
Öğe 1: null
Öğe 2: null
Öğe 3: null
Öğe 4: null
Öğe 5: null
Öğe 6: null
Öğe 7: null
Öğe 8: null
Öğe 9: null
Öğe 10: null
Öğe 11: null

Gördüğünüz gibi, bir dizgeyle birleştirildiğinde, null değeri " null " dizgesine dönüşür . Bununla birlikte, toString() yöntemini şu şekilde çağırırsanız :

String[] strings = null;
System.out.println(strings.toString());

o zaman bir NullPointerException alacaksınız (istisnaları daha sonra ayrıntılı olarak tartışacağız). Aynı şey, null üzerinde başka bir yöntemi çağırmaya çalışırsanız da olur (istisna, biraz sonra öğreneceğiniz statik yöntemlerdir):

public static void main(String[] args) {
    StringBuilder sb = null;
    sb.append("test"); // This will compile, but there will be a runtime error
}

null , diğer şeylerin yanı sıra ayrılmış bir anahtar kelimedir ( public veya static gibi), bu nedenle null adlı bir değişken, yöntem veya sınıf oluşturamazsınız . Diğerleri gibi, bu anahtar kelime de büyük/ küçük harfe duyarlıdır (her yerde null yazdığımızı fark etmiş olabilirsiniz ). Bunun anlamı:

String firstName = Null; // Compilation error
String secondName = NULL; // Compilation error
String fullName = null; // This will compile

Şimdi null ile başka neler yapabileceğinize ve yapamayacağınıza bir göz atalım :

  • Herhangi bir referansa null atayabilirsiniz :

    StringBuilder sb = null;
  • null, herhangi bir referans türüne dönüştürülebilir:

    String s = (String) null; // This will compile, but doing this doesn't make any sense :)
  • null, ilkel bir değişkene atanamaz:

    int i = null; // This won't compile
  • null, == ve != kullanılarak karşılaştırılabilir

  • null == null true değerini döndürür

Önceki derslerde Java'da her şeyin bir nesne olduğundan ve her nesnenin bir türü olduğundan bahsetmiştik.

Bu açıdan null hakkında ne söyleyebiliriz ? null , belirli bir türün sabit değeridir ve bu türün adı yoktur. Ve bu türün bir adı olmadığı için, bu türde bir değişken bildirmek veya ona atama yapmak imkansızdır. Bu nedenle, null , bu adsız türün tek temsilcisidir. Uygulamada, bu türü yok sayabilir ve null'u herhangi bir referans değişkenine atanabilecek özel bir sabit değer olarak düşünebiliriz.

Hatırlanacak şeyler:

  • null , başvuru veri türleri için varsayılan değerdir
  • null "değer yok" anlamına gelir
  • Değeri null olan bir nesne üzerinde herhangi bir yöntemi çağırırsak , kod derlenir ancak çalışma zamanında bir NullPointerException elde ederiz .