"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Por qué pasar `nulo 'a un método sobrecargado en Java llama al método con el parámetro` string'?

¿Por qué pasar `nulo 'a un método sobrecargado en Java llama al método con el parámetro` string'?

Publicado el 2025-03-04
Navegar:200

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

sobrecarga y selección de parámetros nulos

en java, cuando un método está sobrecargado, existen múltiples métodos con el mismo nombre pero diferentes listas de parámetros. Cuando se realiza una invocación de método, el compilador determina qué método sobrecargado se llama en función del número y los tipos de los argumentos reales. Método de vacío público (objeto o) { System.out.println ("Verion de objeto"); } Método publico publicitario (String S) { System.out.println ("Versión de cadena"); } public static void main (string args []) { MoneyCalc pregunta = new MoneyCalC (); pregunta.method (nulo); } }

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

respuesta:

en java, null es un valor constante especial que representa una referencia a un objeto que no existe. No es un valor de ningún tipo en particular, pero se puede asignar a una variable de cualquier tipo de referencia, incluido el objeto y la cadena. cuando la invocación del método se realiza con NULL como argumento, el compilador elige la versión del método (String) porque es más específica que la versión del método (objeto). Según la especificación del lenguaje Java (JLS), la sobrecarga más específica se elige en función de su aplicabilidad y especificidad.

La aplicabilidad se refiere a si los argumentos se pueden pasar al método sin un error de tiempo de compilación. En este caso, NULL es aplicable a ambos métodos, ya que se puede asignar a variables de tipos de objetos y cadenas.

mide cuán especializado es el método para los argumentos dados. En este caso, la sobrecarga del método (String) es más específica porque está diseñada para manejar los argumentos de tipo String. El método (objeto) sobrecarga es más general, ya que puede manejar argumentos de tipo objeto o cualquiera de sus subclases.

, el compilador selecciona la versión del método (string) como es más específico y aplicable al argumento proporcionado, que es una referencia nula. Clase MoneyCalc, se produciría un error de compilación. Esto se debe a que ni el método (String) ni el método (StringBuffer) sería más específico que el otro en este caso, lo que lleva a una ambigüedad en la selección del método.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3