Abandonar
Cuál es la diferencia entre
Object foo = "something";
String bar = String.valueOf(foo);
y
Object foo = "something";
String bar = (String) foo;
Joaquín Sauer
La conversión a cadena solo funciona cuando el objeto en realidad es una cuerda:
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 pases en un String
. Maneja ambas primitivas (42
) y 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 null
a String.valueOf()
devolverá la cadena "null"
.
-
@AdamStelmaszczyk: Dudo que haya alguno que sea relevante. Quizás el lanzamiento es un poco más rápido, pero las otras diferencias (manejo nulo, capacidad para manejar otros tipos) son solo significativamente más importante que cualquier pequeña diferencia de rendimiento que pueda haber.
– Joaquín Sauer
29 mayo 2013 a las 13:38
-
Para llevar esta pregunta un poco más lejos, ¿hay alguna diferencia significativa entre llamar
String.valueOf()
yobj.toString()
? (La primera que me viene a la mente es queobj.toString()
será a través de una excepción siobj
es nulo.)–Kevin
29 mayo 2013 a las 19:08
-
@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 deString.valueOf()
en su JDK verá que todo lo que hace para referencias no nulas es llamartoString()
.– Joaquín Sauer
29 mayo 2013 a las 19:48
-
Intentó
str = String.valueOf(null)
en Java 7 Update 80, arroja unNullPointerException
.– plata
25 de septiembre de 2015 a las 16:17
-
@silver: De hecho, simplifiqué demasiado.
String.valueOf((Object) null)
devolverá la cadena “null”. Llamándolo con un literalnull
llamará a String#valueOf(char[]) que en realidad arroja un NPE cuando pasanull
.– Joaquín Sauer
28 de septiembre de 2015 a las 11:19
Darijan
String.valueOf(foo)
invoca Foo‘s .toString()
método y asigna el resultado a la bar. Es operación segura nula y de tipo.
Casting solo asignará Foo hacia bar, si los tipos coinciden. De lo contrario, la expresión arrojará un ClassCastException
.
-
+1 por explicar eso
String.valueOf(Object)
invocaObject.toString()
–Ryan Amos
29 mayo 2013 a las 15:40
Casting significa que el objeto debe ser de tipo String, mientras que String.valueOf()
puede tomar otros tipos también.
Suresh atta
Ambos generan lo mismo producción en caso de String
.
Casting
falla en caso de que el objeto proporcionado no sea un string.
El método String.valueOf se utiliza para obtener la representación de cadena de su objeto de parámetro.
(Cadena) el valor convierte el valor del objeto en una cadena.
Puede usar el método String.valueOf para obtener la representación de cadena de un objeto sin preocuparse por las referencias nulas. Si intenta convertir String en una referencia nula, obtendrá una NullPointerException.
Zaki
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");
Producción: strCastOfObj is null
Sri Harsha Chilakapati
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, arroja la excepción.
En el último, está lanzando directamente, lo que puede fallar si el objeto no es una cadena.
Ejemplo en línea.
-
¿Qué tipo de excepción?
– Yousha Aleayoub
10 de agosto de 2016 a las 16:31
Uh, no son lo mismo… en absoluto.
– Percepción
29 mayo 2013 a las 13:32