В вашем случае кастинг не требуется, вам нужен вызов toString ().
Integer i = 33;
String s = i.toString();
//or
s = String.valueOf(i);
//or
s = "" + i;
Кастинг. Как это работает?
Дано:
class A {}
class B extends A {}
(А)
|
(В)
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 {}
(А)
/ \
(В1) (В2)
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()
метод, который преобразует его в String. Как указано в нескольких ответах, это то, что вы должны использовать. (Для некоторых объектовtoString()
не возвращает очень полезную строку, но дляInteger
, вероятно, делает именно то, что вы хотите.)