Ich stehe in meinem Programm vor einem Problem, und ich habe es mit einem kleinen Codeausschnitt unten klargestellt. Kann jemand erklären, warum das passiert?
%Vor% Dies gibt immer I am null string
aus.
Ich möchte den Grund wissen, damit ich den Code ändern kann.
Das liegt daran, dass im Falle einer Überladung der Methode
Die spezifischste Methode wird zur Kompilierzeit ausgewählt.
Als 'java.lang.String' ist ein spezifischer Typ als 'java.lang.Object'. In Ihrem Fall wird die Methode gewählt, die 'String' als Parameter verwendet.
Es ist eindeutig in JLS dokumentiert:
Der zweite Schritt sucht den im vorherigen Schritt ermittelten Typ Mitglied Methoden. Dieser Schritt verwendet den Namen der Methode und die Typen von Die Argumentausdrücke zum Auffinden von Methoden, auf die beide zugreifen können und anwendbar, das heißt, Deklarationen, die korrekt aufgerufen werden können auf die gegebenen Argumente.
Es kann mehr als eine solche Methode geben, in In diesem Fall wird der spezifischste ausgewählt. Der Deskriptor (Unterschrift plus Rückgabetyp) der spezifischsten Methode wird zur Laufzeit verwendet um den Methodenversand durchzuführen.
Ich stimme dem bestehenden Kommentar zur Auswahl der spezifischsten Methode zu. Sie können erzwingen, dass Ihr NULL als Objektreferenz behandelt wird, indem Sie die String-Argumentmethode umgehen, indem Sie sie umsetzen:
%Vor%Siehe Abschnitt 15.12.2.5 von jls, die detailliert angeben, wie
zu wählen istDie spezifischste Methode wird zur Kompilierzeit ausgewählt