Überladungsauflösung: Interpretation des Null-Literals
In Java ist ein Null-Literal eine gültige Referenz, die jeder Objektvariablen zugewiesen werden kann , einschließlich solcher von Referenztypen wie String. Dieses Verhalten spielt eine entscheidende Rolle bei der Auflösung überladener Methoden, wenn ein Parameter als Null übergeben wird.
Bedenken Sie den folgenden Codeausschnitt:
public class MoneyCalc { public void method(Object o) { System.out.println("Object Verion"); } public void method(String s) { System.out.println("String Version"); } public static void main(String args[]) { MoneyCalc question = new MoneyCalc(); question.method(null); } }
In diesem Beispiel, wenn die Methode method aufgerufen wird mit Beim Nullliteral wählt der Java-Compiler die Methodenüberladung (String s) anstelle der Methodenüberladung (Objekt o). Dieses Verhalten wird durch das Prinzip der spezifischsten Überladungsauflösung erklärt.
Gemäß der Java Language Specification (JLS) wählt der Compiler die „spezifischste“ Überladung aus, nämlich „die Eins“. an den ein Aufruf ohne einen Typfehler bei der Kompilierung übergeben werden könnte.“ Hier kann das Nullliteral ohne Fehler an die Überladung der Methode (String s) übergeben werden, nicht jedoch an die Überladung der Methode (Objekt o).
Daher wählt der Java-Compiler die Überladung der Methode (String s). , und die Ausgabe des Programms ist „String Version“.
Allerdings:
... public void method(StringBuffer sb) { System.out.println("StringBuffer Verion"); } ...
Wenn eine dritte Überladung hinzugefügt wird, um einen StringBuffer-Parameter zu akzeptieren, wird der Code nicht kompiliert. Dies liegt daran, dass jetzt sowohl die Methodenüberladungen (String s) als auch die Methodenüberladungen (StringBuffer sb) gleichermaßen spezifisch sind, was zu Mehrdeutigkeiten führt und den Compiler daran hindert, die am besten geeignete Überladung auszuwählen.
Das obige ist der detaillierte Inhalt vonWarum wählt die Übergabe von Null an eine Methodenüberladung die String-Version gegenüber der Objektversion aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!