Object notAString = new Integer(42);
String str = (String) notAString; // will throw a ClassCastException
String.valueOf()sin embargo, intentará convertir todo lo que le pase en un archivo String. Maneja tanto primitivas ( 42) como objetos ( new Integer(42), usando ese objeto toString()):
String str;
str = String.valueOf(new Integer(42)); // str will hold "42"
str = String.valueOf("foo"); // str will hold "foo"
Object nullValue = null;
str = String.valueOf(nullValue); // str will hold "null"
Tenga en cuenta especialmente el último ejemplo: pasar nulla String.valueOf()devolverá la cadena "null".
@AdamStelmaszczyk: Dudo que haya alguno que sea relevante. Tal vez el lanzamiento sea un poco más rápido, pero las otras diferencias (manejo nulo, capacidad para manejar otros tipos) son significativamente más importantes que cualquier diferencia menor de rendimiento que pueda haber.
Joachim Sauer
3
Para impulsar esta pregunta un poco más, ¿hay alguna diferencia significativa entre llamar String.valueOf()y obj.toString()? (Lo primero que me viene a la mente es que se obj.toString()hará mediante una excepción si objes nulo).
Kevin
3
@Kevin: para los tipos de referencia (también conocidos como "objetos") la única diferencia es lo que sucede con null. Si observa la implementación de String.valueOf()en su JDK, verá que todo lo que hace para las referencias no nulas es llamar toString().
Joachim Sauer
@JoachimSauer Siempre pensé que String.valueOf()era más elegante que un elenco. Pero si String.valueOf()hace todo lo que hace el casting, y más, ¿hay alguna razón por la que uno elegiría usar un yeso? ¿Por qué no ha quedado obsoleto?
Shahid M Zubair
1
@silver: De hecho, simplifiqué demasiado. String.valueOf((Object) null)devolverá el String "nulo". Llamarlo con un literal nullllamará a String # valueOf (char []) que en realidad arroja un NPE cuando pasa null.
Joachim Sauer
19
String.valueOf(foo)invoca el método de foo.toString() y asigna el resultado a la barra . Es una operación nula y de tipo seguro.
El casting simplemente asignará foo a la barra , si los tipos coinciden. De lo contrario, la expresión arrojará un ClassCastException.
El método String.valueOf se utiliza para obtener la representación String de su objeto de parámetro.
(Cadena) valor convierte el valor del objeto en una cadena.
Puede utilizar el método String.valueOf para obtener la representación String de un objeto sin preocuparse por las referencias nulas. Si intenta convertir String en una referencia nula, obtendrá una NullPointerException.
final Object obj = null;
final String strValOfObj = String.valueOf(obj);
final String strCastOfObj = (String) obj;
if (strValOfObj == null) System.out.println("strValOfObj is null");
if (strCastOfObj == null) System.out.println("strCastOfObj is null");
El primero, es decir, String.valueOfdevuelve una cadena solo si el objeto es un tipo representable, que es un tipo de valor o una cadena. De lo contrario, lanza la excepción.
En el último, está emitiendo directamente, lo que puede fallar si el objeto no es una cadena.
en String.valueOf (); cadena como trabajo de conversión de tipos todos los argumentos pasados en el método valueof () convertir en String y al igual que integer.string () convertir entero en cadena solamente
Respuestas:
La conversión a cadena solo funciona cuando el objeto en realidad es una cadena:
Object reallyAString = "foo"; String str = (String) reallyAString; // works.
No funcionará cuando el objeto sea otra cosa:
Object notAString = new Integer(42); String str = (String) notAString; // will throw a ClassCastException
String.valueOf()
sin embargo, intentará convertir todo lo que le pase en un archivoString
. Maneja tanto primitivas (42
) como objetos (new Integer(42)
, usando ese objetotoString()
):String str; str = String.valueOf(new Integer(42)); // str will hold "42" str = String.valueOf("foo"); // str will hold "foo" Object nullValue = null; str = String.valueOf(nullValue); // str will hold "null"
Tenga en cuenta especialmente el último ejemplo: pasar
null
aString.valueOf()
devolverá la cadena"null"
.fuente
String.valueOf()
yobj.toString()
? (Lo primero que me viene a la mente es que seobj.toString()
hará mediante una excepción siobj
es nulo).null
. Si observa la implementación deString.valueOf()
en su JDK, verá que todo lo que hace para las referencias no nulas es llamartoString()
.String.valueOf()
era más elegante que un elenco. Pero siString.valueOf()
hace todo lo que hace el casting, y más, ¿hay alguna razón por la que uno elegiría usar un yeso? ¿Por qué no ha quedado obsoleto?String.valueOf((Object) null)
devolverá el String "nulo". Llamarlo con un literalnull
llamará a String # valueOf (char []) que en realidad arroja un NPE cuando pasanull
.String.valueOf(foo)
invoca el método de foo.toString()
y asigna el resultado a la barra . Es una operación nula y de tipo seguro.El casting simplemente asignará foo a la barra , si los tipos coinciden. De lo contrario, la expresión arrojará un
ClassCastException
.fuente
String.valueOf(Object)
invocaObject.toString()
Ambos generan la misma salida en el caso de
String
.Casting
falla en caso de que el objeto proporcionado no sea unstring.
fuente
La conversión significa que el objeto debe ser de tipo String, mientras que también
String.valueOf()
puede tomar otros tipos.fuente
El método String.valueOf se utiliza para obtener la representación String de su objeto de parámetro.
(Cadena) valor convierte el valor del objeto en una cadena.
Puede utilizar el método String.valueOf para obtener la representación String de un objeto sin preocuparse por las referencias nulas. Si intenta convertir String en una referencia nula, obtendrá una NullPointerException.
fuente
Salida :
strCastOfObj is null
fuente
El primero, es decir,
String.valueOf
devuelve una cadena solo si el objeto es un tipo representable, que es un tipo de valor o una cadena. De lo contrario, lanza la excepción.En el último, está emitiendo directamente, lo que puede fallar si el objeto no es una cadena.
Ejemplo en línea.
http://ideone.com/p7AGh5
fuente
en String.valueOf (); cadena como trabajo de conversión de tipos todos los argumentos pasados en el método valueof () convertir en String y al igual que integer.string () convertir entero en cadena solamente
fuente