null in Java ist weder ein Objekt noch ein Typ, es ist nur ein spezieller Wert, Sie können ihn jedem Referenztyp zuweisen, Sie können null auch in einen beliebigen Typ konvertieren .
Detaillierte Erklärung des Null-Schlüsselworts
1. Zunächst einmal ist Null ein Schlüsselwort, wie public, static und final. Dabei wird die Groß-/Kleinschreibung beachtet, Sie können null nicht als Null oder NULL schreiben, der Compiler erkennt sie nicht und meldet einen Fehler.
2. So wie jeder Basistyp einen Standardwert hat, ist der Standardwert von int beispielsweise 0, der Standardwert von boolean ist false und null ist der Standardwert jedes Referenztyps. So wie Sie eine Variable vom Typ Boolean erstellen, deren Standardwert „false“ ist, hat jede Referenzvariable in Java den Standardwert „null“. Dies gilt für alle Variablen.
Wie Mitgliedsvariablen, lokale Variablen, Instanzvariablen, statische Variablen (wenn Sie eine nicht initialisierte lokale Variable verwenden, werden Sie vom Compiler gewarnt). Um diese Tatsache zu demonstrieren, können Sie diese Referenzvariable beobachten, indem Sie eine Variable erstellen und dann ihren Wert ausgeben.
Empfohlene kostenlose Video-Tutorials: Java-Video
3 Wir möchten einige Missverständnisse klären, bei denen es sich weder um ein Objekt noch um einen Typ handelt, sondern lediglich um einen besonderen Wert. Sie können es jedem Referenztyp zuweisen, Sie können null auch in einen beliebigen Typ konvertieren. Sehen Sie sich den folgenden Code an:
String str = null; Integer i = null; Double d = null; String myStr = (String) null; Integer myI = (Integer) null; Double myD = (Double) null;
Sie können sehen, dass während der Kompilierung und Laufzeit null in einen beliebigen Referenztyp umgewandelt wird. Alle Referenztypen sind möglich , und zur Laufzeit wird keine Nullzeigerausnahme ausgelöst.
4. Referenzvariablen können Null zugewiesen werden, Basistypvariablen wie int, double, float und boolean können jedoch keine Null zugewiesen werden. Der Compiler meldet einen Fehler.
Wie Sie sehen, tritt ein Kompilierungsfehler auf, wenn Sie null direkt einem Basistyp zuweisen. Wenn Sie jedoch dem Wrapper-Klassenobjekt null zuweisen und dann das Objekt den jeweiligen Basistypen zuweisen, meldet der Compiler dies nicht, aber Sie werden zur Laufzeit auf eine Nullzeigerausnahme stoßen. Dies wird durch das automatische Unboxing in Java verursacht.
5. Jede Wrapper-Klasse, die einen Nullwert enthält, löst eine Nullzeigerausnahme aus, wenn beim Java-Unboxing grundlegende Datentypen generiert werden. Einige Programmierer machen den Fehler zu glauben, dass Autoboxing null in den Standardwert des jeweiligen Basistyps umwandelt, z. B. 0 für int und false für booleschen Typ, aber das ist nicht korrekt, wie unten gezeigt:
Integer iAmNull = null; int i = iAmNull; // Remember - No Compilation Error
Wenn Sie jedoch den obigen Codeausschnitt ausführen, sehen Sie auf der Konsole, dass der Hauptthread eine Nullzeigerausnahme auslöst. Viele dieser Fehler treten bei der Verwendung von HashMap- und Integer-Schlüsselwerten auf. Wenn Sie den folgenden Code ausführen, wird ein Fehler angezeigt.
public class Test3 { public static void main(String args[]) throws InterruptedException { Map numberAndCount = new HashMap<>(); int[] numbers = {3, 5, 7,9, 11, 13, 17, 19, 2, 3, 5, 33, 12, 5}; for(int i : numbers){ int count = (int) numberAndCount.get(i);//NullPointerException numberAndCount.put(i, count++); } } } package test;import java.util.HashMap; import java.util.Map; public class Test3 { public static void main(String args[]) throws InterruptedException { Map numberAndCount = new HashMap<>(); Integer[] numbers = {3, 5, 7,9, 11, 13, 17, 19, 2, 3, 5, 33, 12, 5}; for(Integer i : numbers){ Integer count = (Integer) numberAndCount.get(i); numberAndCount.put(i, count++); // NullPointerException } } }
Dieser Code sieht sehr einfach und fehlerfrei aus. Sie müssen lediglich herausfinden, wie oft eine Zahl in einem Array vorkommt. Dies ist die typische Technik zum Auffinden von Duplikaten in Java-Arrays. Der Entwickler ruft zunächst den vorherigen Wert ab, fügt dann einen hinzu und fügt den Wert schließlich wieder in die Map ein.
Programmierer denken möglicherweise, dass beim Aufrufen der Put-Methode die erste Möglichkeit darin besteht, int zu konvertieren, um einen Nullzeiger zu melden und zu überprüfen, was zuvor gesagt wurde. Bei der zweiten Methode löst Autoboxing das Unboxing-Problem selbst, vergisst jedoch, dass die get-Methode null statt 0 zurückgibt, wenn eine Zahl keinen Zählwert hat, da der Standardwert von Integer null statt 0 ist. Autoboxing gibt eine NullPointerException zurück, wenn ein Nullwert an eine int-Variable übergeben wird.
6. Wenn eine Referenztypvariable mit einem Nullwert verwendet wird, gibt die Instanz der Operation „false“ zurück
Integer iAmNull = null; if(iAmNull instanceof Integer){ System.out.println("iAmNull is instance of Integer"); }else{ System.out.println("iAmNull is NOT an instance of Integer"); }
Dies ist eine sehr wichtige Funktion der Instanz der Operation, die die Überprüfung sehr einfach macht Mit der Typumwandlung funktioniert es.
7. Möglicherweise wissen Sie, dass Sie keine nicht statischen Methoden aufrufen können, um eine Referenztypvariable mit einem Nullwert zu verwenden. Es wird eine Nullzeigerausnahme ausgelöst, aber Sie wissen möglicherweise nicht, dass Sie statische Methoden verwenden können, um eine Referenztypvariable mit dem Wert Null zu verwenden. Da statische Methoden eine statische Bindung verwenden, werden keine Nullzeigerausnahmen ausgelöst. Hier ist ein Beispiel:
public class Testing { public static void main(String args[]){ Testing myObject = null; myObject.iAmStaticMethod(); myObject.iAmNonStaticMethod(); } private static void iAmStaticMethod(){ System.out.println("I am static method, can be called by null reference"); } private void iAmNonStaticMethod(){ System.out.println("I am NON static method, don't date to call me by null"); }
8. Sie können null an die Methode übergeben. Zu diesem Zeitpunkt kann die Methode beispielsweise print(null) wie folgt aufrufen. Aus Kompilierungssicht ist das in Ordnung, das Ergebnis hängt jedoch vollständig von der Methode ab. Nullsichere Methoden, wie etwa die print-Methode in diesem Beispiel, lösen keine NullPointerException aus und werden einfach ordnungsgemäß beendet. public void print(Object obj)
Das obige ist der detaillierte Inhalt vonIst null ein Objekt in Java?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!