Encontré una extraña excepción:
java.lang.ClassCastException: java.lang.Integer
cannot be cast to java.lang.String
¿Cómo puede ser posible? Cada objeto se puede convertir en String, ¿no es así?
El codigo es:
String myString = (String) myIntegerObject;
Gracias.
toString()
método que lo convertirá en una cadena. Como señalan varias respuestas, eso es lo que debe usar. (Para algunos objetos,toString()
no devuelve una cadena muy útil , peroInteger
probablemente haga exactamente lo que desea).""+myIntegerObject
también funciona :)Integer.toString(IntegerObject)
y me dio este error, pero está contento conIntegerObject.toString()
... Y sí, eso realmente es un Integer, y realmente recibí este error ...String.valueOf()
realmente funciona ...Respuestas:
Por qué esto no es posible:
Porque String y Integer no están en la misma jerarquía de Objetos.
El casting que estás probando, funciona solo si están en la misma jerarquía, p. Ej.
En este caso,
(A) objB
o(Object) objB
, o(Object) objA
va a funcionar.Por lo tanto, como otros ya han mencionado, para convertir un número entero en una cadena:
String.valueOf(integer)
, oInteger.toString(integer)
para primitivo,o
Integer.toString()
para el objeto.fuente
(B) objA
no funcionará.(A) objA
y(B) objB
funcionará.No,
Integer
yString
son de diferentes tipos. Para convertir un número entero en una cadena, use:,String.valueOf(integer)
oInteger.toString(integer)
para primitivo, oInteger.toString()
para el objeto.fuente
Para
int
tipos de uso:Para
Integer
tipos de uso:fuente
toString()
métodoString myString = myIntegerObject.toString();
No. Todos los objetos se pueden convertir en un
java.lang.Object
, no unString
. Si desea una representación de cadena de cualquier objeto, debe invocar eltoString()
método; esto no es lo mismo que convertir el objeto en una cadena.fuente
Los objetos se pueden convertir en una cadena usando el
toString()
método:No existe tal regla sobre el casting . Para que la transmisión funcione, el objeto debe ser del tipo al que se está enviando.
fuente
No puedes enviar explícitamente nada a un
String
que no seaString
. Debes usar:o:
o:
Prefiero la segunda forma, pero creo que es una elección personal.
Editar OK, por eso prefiero la segunda forma. La primera forma, cuando se compila, podría instanciar a
StringBuffer
(en Java 1.4) o aStringBuilder
en 1.5; una cosa más para ser la basura recolectada. El compilador no optimiza esto por lo que pude ver. La segunda forma también tiene un análogo,Integer.toString(myInt, radix)
que te permite especificar si quieres hexadecimal, octal, etc. Si quieres ser consistente en tu código (puramente estéticamente, supongo), la segunda forma se puede usar en más lugares.Edición 2 Supuse que querías decir que tu número entero era un
int
y no unInteger
. Si ya es unInteger
, solo utilícelotoString()
y listo.fuente
myIntegerObject.toString()
.Debe llamar a myIntegerObject.toString () si desea la representación de cadena.
fuente
La conversión es diferente a la conversión en Java, para usar terminología informal.
Transmitir un objeto significa que el objeto ya es a lo que lo está enviando, y solo se lo está diciendo al compilador. Por ejemplo, si tengo una
Foo
referencia que sé que es unaFooSubclass
instancia, entonces(FooSubclass)Foo
le dice al compilador, "no cambie la instancia, solo sepa que en realidad es unFooSubclass
.Por otro lado, an no
Integer
es un , aunque (como señala) existen métodos para obtener un que represente un . Dado que ninguna instancia de puede ser a , no puedes lanzar a .String
String
Integer
Integer
String
Integer
String
fuente
En su caso, no necesita conversión, necesita llamar a toString ().
Fundición. ¿Como funciona?
Dado:
A y B en el mismo árbol de herencia y podemos esto:
El compilador debe permitir cosas que posiblemente funcionen en tiempo de ejecución. Sin embargo, si el compilador sabe al 100% que el elenco no podría funcionar, la compilación fallará.
Dado:
Error: Inconvertibles tipos B1 y B2. El compilador sabe al 100% que el elenco no podría funcionar. Pero puedes engañar al compilador:
pero de todos modos en tiempo de ejecución:
Excepción en el hilo "main" java.lang.ClassCastException: B1 no se puede convertir a B2
en tu caso:
en tiempo de ejecución: excepción en el hilo "principal" java.lang.ClassCastException: java.lang.Integer no se puede convertir a java.lang.String
fuente
Utilice String.valueOf (integer) .
Devuelve una representación de cadena de entero.
fuente
String.valueOf(integer)
Use .toString en su lugar como a continuación:
fuente