2010-11-16 24 views

Respuesta

22

Debido Java convierte la expresión "A String" + x a algo en la línea de "A String" + String.valueOf(x)

En realidad, creo que probablemente usa StringBuilder s, de modo que:

"A String " + x + " and another " + y 

la resolución a los más eficientes

new StringBuilder("A String ") 
    .append(x) 
    .append(" and another ") 
    .append(y).toString() 

Esto usa los métodos append en el generador de cadenas (para cada tipo), que h andle null correctamente

+0

IIRC, en realidad no golpea 'String.valueOf (y)'. Hay sobrecargas de 'StringBuilder.append' para cada tipo posible, y' append (Object) 'maneja el nulo directamente. Sin embargo, puede reemplazar el "Creo que probablemente" con "eso". –

+0

Sí, soy viejo skool, me temo, desde el día en que la concatenación de cadenas no era perfecta. –

+2

Acaba de inspeccionar el código para 'append (Object)', y de hecho delega a 'String.valueOf()'. * Dentro * el método sin embargo. Entonces se reducen a las mismas llamadas. –

7

Java usa StringBuilder.append(Object obj) detrás de escena.

No es difícil imaginar su implementación.

public StringBuilder append(Object obj) 
{ 
    if (obj == null) 
    { 
     append("null"); 
    } 
    else 
    { 
     append(obj.toString()); 
    } 

    return this; 
} 
+0

Enlace a la implementación: http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/lang/StringBuilder.java#170 –

3

El código "" + null es convertido por el compilador para

new StringBuffer().append("").append(null); 

y StringBuffer reemplaza nula con la cadena "nula". Entonces el resultado es la cadena "nula".

+2

Solo una pequeña corrección; ahora es StringBuilder no StringBuffer. La seguridad del subproceso no es una preocupación con la concatenación de cadenas (durante la vida útil del constructor de todos modos). –

+0

¿Por qué querría/necesitaría escribir '" "+ null' en lugar de simplemente' "nulo" '? ¿Ese ejemplo es solo para ejercicio académico? – user46874

+0

@ user46874: creo que debe haber sido un experimento para ver cómo se imprimen los nulos. –

Cuestiones relacionadas