Heim  >  Artikel  >  Java  >  Warum ruft die Übergabe von „null“ an eine überladene Methode in Java die Methode mit dem Parameter „String“ auf?

Warum ruft die Übergabe von „null“ an eine überladene Methode in Java die Methode mit dem Parameter „String“ auf?

Susan Sarandon
Susan SarandonOriginal
2024-11-07 02:35:02909Durchsuche

Why does passing `null` to an overloaded method in Java call the method with the `String` parameter?

Methodenüberladung und Nullparameterauswahl

Wenn in Java eine Methode überladen ist, existieren mehrere Methoden mit demselben Namen, aber unterschiedlichen Parameterlisten . Wenn ein Methodenaufruf erfolgt, bestimmt der Compiler basierend auf der Anzahl und den Typen der tatsächlich übergebenen Argumente, welche überladene Methode aufgerufen werden soll.

Beachten 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);
   }
}

Frage:Warum ruft die Übergabe eines Nullwerts an die überladene Methode method die Methodenversion (String) auf?

Antwort:

In Java ist null ein spezieller konstanter Wert, der einen Verweis auf ein Objekt darstellt, das nicht existiert. Es ist kein Wert eines bestimmten Typs, aber er kann einer Variablen eines beliebigen Referenztyps, einschließlich Objekt und String, zugewiesen werden.

Wenn der Methodenaufruf mit Null als Argument erfolgt, wählt der Compiler die aus method(String)-Version, da sie spezifischer ist als die method(Object)-Version. Gemäß der Java Language Specification (JLS) wird die spezifischste Überladung basierend auf ihrer Anwendbarkeit und Spezifität ausgewählt.

Anwendbarkeit bezieht sich darauf, ob die Argumente ohne einen Fehler bei der Kompilierung an die Methode übergeben werden können. In diesem Fall ist null auf beide Methoden anwendbar, da es Variablen sowohl des Objekt- als auch des String-Typs zugewiesen werden kann.

Die Spezifität misst, wie spezialisiert die Methode für die angegebenen Argumente ist. In diesem Fall ist die Methodenüberladung (String) spezifischer, da sie nur für die Verarbeitung von Argumenten vom Typ String konzipiert ist. Die Methodenüberladung (Objekt) ist allgemeiner, da sie Argumente vom Typ Objekt oder einer seiner Unterklassen verarbeiten kann.

Daher wählt der Compiler die Methodenversion (String) aus, da diese spezifischer und auf die bereitgestellten Elemente anwendbar ist Argument, das eine Nullreferenz ist.

Hinweis: Wenn eine zweite überladene Methode mit StringBuffer als Parametertyp zur MoneyCalc-Klasse hinzugefügt wird, würde ein Kompilierungsfehler auftreten. Dies liegt daran, dass weder method(String) noch method(StringBuffer) in diesem Fall spezifischer wären als die anderen, was zu einer Mehrdeutigkeit bei der Methodenauswahl führen würde.

Das obige ist der detaillierte Inhalt vonWarum ruft die Übergabe von „null“ an eine überladene Methode in Java die Methode mit dem Parameter „String“ auf?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn