2010-10-28 7 views

Respuesta

18

Porque String.valueOf(null) elige el método sobrecargado con el argumento char[], y luego falla en el constructor new String(null). Esta elección se realiza en tiempo de compilación.

Si desea utilizar explícitamente el método sobrecargado con un Object argumento, utilice:

String.valueOf((Object) null) 

Tenga en cuenta que no existe un método sobrecargado teniendo un argumento String - el que se invoca en el primer caso se está llevando a Object.

Para citar el JLS:

15.12.2 de tiempo de compilación Paso 2: Determinar Método Firma

El segundo paso busca en el tipo determinado en el paso anterior para los métodos de miembros. Este paso usa el nombre del método y los tipos de las expresiones de argumento para ubicar los métodos que son accesibles y aplicables, es decir, las declaraciones que pueden invocarse correctamente en los argumentos dados. Puede haber más de un método de este tipo, en cuyo caso se elige el más específico. El descriptor (firma más el tipo de devolución) del método más específico es el que se usa en tiempo de ejecución para realizar el envío del método.

Todos los métodos son aplicables, por lo que ir a:

15.12.2.5 La elección del método más específico

Si más de un miembro de método es a la vez accesible y aplicable a una invocación de método, es necesario elegir uno para proporcionar el descriptor para el envío del método en tiempo de ejecución. El lenguaje de programación Java usa la regla de que se elige el método más específico.

La intuición informal es que un método es más específico que otro si cualquier invocación manejada por el primer método podría pasarse a la otra sin un error de tipo de tiempo de compilación.

Gracias a polygenelubricants - sólo hay dos métodos sobrecargados aceptar un objeto - char[] y Object-char[] es más específico.

+0

null debe considerarse como un objeto. ¿por qué lo está considerando como char []? – Sujith

+3

@Sujith: Porque 'char []' * es * un objeto – skaffman

+0

@Sujith ¿estás usando eclipse o javac? – Bozho

Cuestiones relacionadas