Heim > Java > javaLernprogramm > Warum wählt die überladene Methodenauswahl von Java „method(String s)' aus, wenn „null' übergeben wird?

Warum wählt die überladene Methodenauswahl von Java „method(String s)' aus, wenn „null' übergeben wird?

Susan Sarandon
Freigeben: 2024-11-07 04:47:02
Original
844 Leute haben es durchsucht

 Why does Java's overloaded method selection choose `method(String s)` when passed `null`?

Überladene Methodenauswahl mit Null-Parameter

Betrachten Sie den folgenden Java-Code:

public class MoneyCalc {</p>
<p>public void method(Object o) {</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">  System.out.println("Object Verion");
Nach dem Login kopieren

}

public void method(String s) {

  System.out.println("String Version");
Nach dem Login kopieren
Nach dem Login kopieren

}

public static void main(String args[]) {

  MoneyCalc question = new MoneyCalc();
  question.method(null);
Nach dem Login kopieren
Nach dem Login kopieren

}
}

Hier die überladene Methode Bei der Übergabe eines Nullwerts als Parameter wird die Methode „method(String s)“ ausgewählt. Dies mag kontraintuitiv erscheinen, da null nicht explizit als String-Variable deklariert wird.

Null als Objekt verstehen

Trotz des Namens „Objektversion“ ist die Die Überladung von „method(Object o)“ ist nicht auf Objekte beschränkt. In Java kann null in einen Ausdruck eines beliebigen Klassentyps, einschließlich String, konvertiert werden. Daher gilt folgende Zuordnung:

String x = null;<br>

Bestimmung der Methodenspezifität

Der Java-Compiler wählt die spezifischste Überladung gemäß Abschnitt 15.12.2.5 der Java Language Specification (JLS). Informell ist eine Methode spezifischer, wenn von ihr verarbeitete Aufrufe auch von einer anderen Methode ohne Typfehler bei der Kompilierung verarbeitet werden könnten.

In diesem Fall ist die Überladung „method(String s)“ spezifischer, weil Es kann Aufrufe mit String-Argumenten verarbeiten. Die Überladung „method(Object o)“ hingegen kann jeden Objekttyp verarbeiten, einschließlich Null. Aufrufe mit String-Argumenten können jedoch nicht ohne Umwandlung verarbeitet werden, was zu einem Fehler bei der Kompilierung führen würde.

Ambiguous Overload with StringBuffer and String

Wenn wir Wenn wir den Code so ändern, dass er eine zusätzliche Überladung „method(StringBuffer sb)“ enthält, tritt ein mehrdeutiger Überladungsfehler auf:

public class MoneyCalc {</p>
<p>public void method(StringBuffer sb) {</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">  System.out.println("StringBuffer Verion");
Nach dem Login kopieren

}

public void method(String s) {

  System.out.println("String Version");
Nach dem Login kopieren
Nach dem Login kopieren

}

public static void main(String args[] ) {

  MoneyCalc question = new MoneyCalc();
  question.method(null);
Nach dem Login kopieren
Nach dem Login kopieren

}
}

Dies liegt daran, dass weder die „Methode(StringBuffer sb)“ noch die „Methode(String s)“ „Überlastung ist spezifischer als die andere. Beide können Nullargumente verarbeiten und keiner kann den Argumenttyp des anderen ohne Umwandlung verarbeiten.

Das obige ist der detaillierte Inhalt vonWarum wählt die überladene Methodenauswahl von Java „method(String s)' aus, wenn „null' übergeben wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Vorheriger Artikel:Warum verändert das Hinzufügen eines „L“ zu einem numerischen Wert in Java das Ergebnis einer Multiplikationsoperation drastisch? Nächster Artikel:Wie erreicht man Zeilenumbruch für Widgets in Android?
Erklärung dieser Website
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
Neueste Artikel des Autors
Aktuelle Ausgaben
verwandte Themen
Mehr>
Beliebte Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage