У вашому випадку не потрібен кастинг, вам потрібен виклик toString ().
Integer i = 33;
String s = i.toString();
//or
s = String.valueOf(i);
//or
s = "" + i;
Кастинг. Як це працює?
Дано:
class A {}
class B extends A {}
(А)
|
(B)
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 і B в одному дереві успадкування, і ми можемо це:
a = new A();
b = (B)a; // again downcast. Compiles but fails later, at runtime: java.lang.ClassCastException
Компілятор повинен дозволити речі, які можуть працювати під час виконання. Однак якщо компілятор на 100% знає, що акторський склад не міг працювати, компіляція не вдасться.
Дано:
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
Помилка: неконвертовані типи B1 та B2. Компілятор на 100% знає, що акторський склад не міг працювати. Але ви можете обдурити компілятор:
B2 b2 = (B2)(A)b1;
але в будь-якому випадку під час виконання:
Виняток у потоці "main" java.lang.ClassCastException: B1 не можна передати в B2
у вашому випадку:
(Об'єкт)
/ \
(Ціле число) (Рядок)
Integer i = 33;
//String s = (String)i; - compiler error
String s = (String)(Object)i;
під час виконання: виняток у потоці "main" java.lang.ClassCastException: java.lang.Integer не може бути передано до java.lang.String
toString()метод, який перетворить його на рядок. Як вказує кілька відповідей, саме цим слід користуватися. (Для деяких об’єктівtoString()не повертає дуже корисний рядок, алеInteger, мабуть, робить саме те, що ви хочете.)