"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Pourquoi le passage de «Null» à une méthode surchargée en Java appelle-t-il la méthode avec le paramètre «String»?

Pourquoi le passage de «Null» à une méthode surchargée en Java appelle-t-il la méthode avec le paramètre «String»?

Publié le 2025-03-04
Parcourir:581

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

Surcharge de la méthode et sélection des paramètres nuls

Dans Java, lorsqu'une méthode est surchargée, plusieurs méthodes existent avec le même nom mais différentes listes de paramètres. Lorsqu'une invocation de méthode est effectuée, le compilateur détermine la méthode surchargée à appeler en fonction du nombre et des types des arguments réels passés.

Considérez l'extrait de code suivant:

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

Question: Pourquoi passer une valeur nul à la méthode surchargée appelle la version de la méthode (string)?

Réponse:

Dans java, null est une valeur constante particulière qui représente une référence à un objet qui n'existe pas. Ce n'est pas une valeur d'un type particulier, mais il peut être attribué à une variable de tout type de référence, y compris l'objet et la chaîne.

Lorsque l'invocation de la méthode est faite avec Null comme argument, le compilateur choisit la version méthode (chaîne) car elle est plus spécifique que la version méthode (objet). Selon la spécification du langage Java (JLS), la surcharge la plus spécifique est choisie en fonction de son applicabilité et de sa spécificité.

Applicabilité fait référence à la transmission des arguments à la méthode sans erreur de compilation. Dans ce cas, NULL s'applique aux deux méthodes car elle peut être attribuée aux variables des types d'objets et de chaînes.

La spécificité mesure la spécialisation de la méthode pour les arguments donnés. Dans ce cas, la surcharge de méthode (chaîne) est plus spécifique car elle est conçue pour gérer uniquement les arguments de la chaîne de type. La surcharge de la méthode (objet) est plus générale car elle peut gérer les arguments de type objet de type ou de l'une de ses sous-classes.

Par conséquent, le compilateur sélectionne la version méthode (string) car elle est plus spécifique et applicable à l'argument fourni, qui est une référence nul. Classe MoneyCalc, une erreur de compilation se produirait. En effet, ni la méthode (String) ni la méthode (StringBuffer) ne seraient plus spécifiques que l'autre dans ce cas, conduisant à une ambiguïté dans la sélection de la méthode.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3