En su caso, no necesita conversión, necesita llamar a toString ().
Integer i = 33;
String s = i.toString();
//or
s = String.valueOf(i);
//or
s = "" + i;
Fundición. ¿Como funciona?
Dado:
class A {}
class B extends A {}
(A)
|
(SI)
B b = new B(); //no cast
A a = b; //upcast with no explicit cast
a = (A)b; //upcast with an explicit cast
b = (B)a; //downcast
A y B en el mismo árbol de herencia y podemos esto:
a = new A();
b = (B)a; // again downcast. Compiles but fails later, at runtime: java.lang.ClassCastException
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:
class A {}
class B1 extends A {}
class B2 extends A {}
(A)
/ \
(B1) (B2)
B1 b1 = new B1();
B2 b2 = (B2)b1; // B1 can't ever be a B2
Error: Inconvertibles tipos B1 y B2. El compilador sabe al 100% que el elenco no podría funcionar. Pero puedes engañar al compilador:
B2 b2 = (B2)(A)b1;
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:
(Objeto)
/ \
(Entero) (Cadena)
Integer i = 33;
//String s = (String)i; - compiler error
String s = (String)(Object)i;
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
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).