Cuál es la diferencia entre
Object foo = "something";
String bar = String.valueOf(foo);
y
Object foo = "something";
String bar = (String) foo;
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 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 null
a String.valueOf()
devolverá la cadena "null"
.
String.valueOf()
y obj.toString()
? (Lo primero que me viene a la mente es que se obj.toString()
hará mediante una excepción si obj
es nulo).
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()
.
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?
String.valueOf((Object) null)
devolverá el String "nulo". Llamarlo con un literal null
llamará a String # valueOf (char []) que en realidad arroja un NPE cuando pasa null
.
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
.
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 un string.
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.
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.
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