java - ¿Por qué `System.out.println(null);` give “El método println(char[]) es ambiguo para el tipo de error PrintStream”?
(2)
Hay 3 métodos de PrintStream en PrintStream que aceptan un tipo de referencia: println(char x[]) , println(String x) , println(Object x) .
Cuando pasa null , los 3 son aplicables. Las reglas de sobrecarga del método prefieren el método con los tipos de argumentos más específicos, por lo que no se elige println(Object x) .
Entonces el compilador no puede elegir entre los dos primeros, println(char x[]) e println(String x) , ya que String no es más específico que char[] y viceversa.
Si desea que se elija un método específico, convierta el nulo al tipo requerido.
Por ejemplo :
System.out.println((String)null);
Estoy usando el código:
System.out.println(null);
Está mostrando el error:
The method println(char[]) is ambiguous for the type PrintStream
¿Por qué null no representa a Object ?
Si llama a System.println(null) existen varios métodos candidatos (con char [] , String y Object ) y el compilador no puede decidir cuál tomar.
Fijar
Agregar un lanzamiento explícito a nulo.
System.out.println((Object)null);
O utilice un patrón de objeto nulo .
¿Por qué
nullrepresenta a Object?
Desde JLS 4.1 Los tipos de tipos y valores
También hay un tipo nulo especial, el tipo de la expresión null, que no tiene nombre.
Debido a que el tipo nulo no tiene nombre, es imposible declarar una variable del tipo nulo o convertir al tipo nulo.
La referencia nula es el único valor posible de una expresión de tipo nulo. La referencia nula siempre se puede convertir a cualquier tipo de referencia.
La referencia nula siempre se puede asignar o convertir a cualquier tipo de referencia
En la práctica, el programador puede ignorar el tipo nulo y simplemente pretender que nulo es simplemente un literal especial que puede ser de cualquier tipo de referencia.
Por lo tanto, el tipo de null no es Object , aunque se puede convertir en un Object (leído como asignado).