Heim >Java >javaLernprogramm >Warum verhält sich die Methodenüberladung bei Nullwerten anders?

Warum verhält sich die Methodenüberladung bei Nullwerten anders?

Susan Sarandon
Susan SarandonOriginal
2024-11-11 06:32:03485Durchsuche

Why Does Method Overloading Behave Differently with Null Values?

Methodenüberladung und Nullwertparameter

Überladene Methoden ermöglichen die Koexistenz mehrerer Methoden mit demselben Namen, aber unterschiedlichen Parameterlisten innerhalb einer Klasse. Beim Aufruf einer überladenen Methode wählt der Compiler anhand der übergebenen Parameterliste die am besten geeignete Methode aus. Wenn jedoch ein Nullwert als Parameter übergeben wird, tritt ein bestimmtes Verhalten auf.

Beachten Sie den folgenden Code:

public class MoneyCalc {

    public void method(Object o) {
        System.out.println("Object Version");
    }

    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 Code wird bei der Übergabe von Null an die Methode method die „String Version“ wird anstelle von „Object Version“ ausgeführt. Dies liegt daran, dass null implizit in jeden Klassentyp konvertiert werden kann, einschließlich String. Daher wählt der Compiler die Methodenüberladung aus, die am ehesten dem abgeleiteten Typ der Nullreferenz entspricht – in diesem Fall String.

Ändern Sie nun den Code leicht:

public class MoneyCalc {

    public void method(StringBuffer sb) {
        System.out.println("StringBuffer Version");
    }

    public void method(String s) {
        System.out.println("String Version");
    }

    public static void main(String[] args) {
        MoneyCalc question = new MoneyCalc();
        question.method(null);
    }
}

Diesmal , tritt eine Mehrdeutigkeit auf, da sowohl die StringBuffer- als auch die String-Methode gleichermaßen auf den Nullverweis anwendbar sind. Keine der Methoden ist spezifischer als die andere, daher löst der Compiler einen Kompilierzeitfehler für diesen Code aus.

Das obige ist der detaillierte Inhalt vonWarum verhält sich die Methodenüberladung bei Nullwerten anders?. 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