Hay poca diferencia. Usa el que es más corto y funciona más a menudo.
Si realmente desea obtener el valor de cadena de un objeto por otras razones, y quiere que sea nula amable, hacer esto:
String s = String.valueOf(obj);
Editar: La pregunta se extiende, por lo que' extenderé mi respuesta
En ambos casos, se compilan a algo como lo siguiente:
System.out.println(new StringBuilder().append("obj: ").append(obj).toString());
Cuando su toString()
es implícita, verá que en la segunda anexión.
Si nos fijamos en el código fuente de Java, verá que StringBuilder.append(Object)
se parece a esto:
public StringBuilder append(Object obj) {
return append(String.valueOf(obj));
}
donde String.valueOf
se parece a esto:
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
Ahora, si usted mismo toString()
, omite una verificación nula y un marco de pila e ir directamente a esto en StringBuilder
:
public StringBuilder append(String str) {
super.append(str);
return this;
}
Entonces ... cosas muy similares ocurren en ambos casos. Uno solo hace un poco más de trabajo.
¿Por qué es preferible usar la última versión? gracias – Bartzilla