Diferencia entre convertir a String y String.valueOf

3 minutos de lectura

avatar de usuario
Abandonar

Cuál es la diferencia entre

Object foo = "something";
String bar = String.valueOf(foo);

y

Object foo = "something";
String bar = (String) foo;

  • Uh, no son lo mismo… en absoluto.

    – Percepción

    29 mayo 2013 a las 13:32

avatar de usuario
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() y obj.toString()? (La primera que me viene a la mente es que obj.toString() será a través de una excepción si obj 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 de String.valueOf() en su JDK verá que todo lo que hace para referencias no nulas es llamar toString().

    – Joaquín Sauer

    29 mayo 2013 a las 19:48

  • Intentó str = String.valueOf(null) en Java 7 Update 80, arroja un NullPointerException.

    – 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 literal null llamará a String#valueOf(char[]) que en realidad arroja un NPE cuando pasa null.

    – Joaquín Sauer

    28 de septiembre de 2015 a las 11:19

avatar de usuario
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) invoca Object.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.

avatar de usuario
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.

avatar de usuario
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

avatar de usuario
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.

http://ideone.com/p7AGh5

  • ¿Qué tipo de excepción?

    – Yousha Aleayoub

    10 de agosto de 2016 a las 16:31

¿Ha sido útil esta solución?