java null system println system.out

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é null representa 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).