Нашел странное исключение:
java.lang.ClassCastException: java.lang.Integer
cannot be cast to java.lang.String
Как это возможно? Каждый объект можно преобразовать в String, не так ли?
Код такой:
String myString = (String) myIntegerObject;
Спасибо.
toString()
метод, который преобразует его в String. Как указано в нескольких ответах, это то, что вы должны использовать. (Для некоторых объектовtoString()
не возвращает очень полезную строку, но дляInteger
, вероятно, делает именно то, что вы хотите.)""+myIntegerObject
тоже работает :)Integer.toString(IntegerObject)
и она дала мне эту ошибку, но она довольнаIntegerObject.toString()
... И да, это действительно целое число, и я действительно получил эту ошибку ...String.valueOf()
самом деле работает ...Ответы:
Почему это невозможно:
Поскольку String и Integer не находятся в одной иерархии объектов.
Приведение, которое вы пытаетесь выполнить, работает, только если они находятся в одной иерархии, например
В этом случае
(A) objB
или(Object) objB
или(Object) objA
будет работать.Следовательно, как уже упоминалось другими, для преобразования целого числа в строку используйте:
String.valueOf(integer)
, илиInteger.toString(integer)
для примитивов,или
Integer.toString()
для объекта.источник
(B) objA
не сработает.(A) objA
и(B) objB
будет работать.Нет,
Integer
иString
бывают разные типы. Чтобы преобразовать целое число в строку, используйте:,String.valueOf(integer)
илиInteger.toString(integer)
для примитива, илиInteger.toString()
для объекта.источник
Для
int
типов используют:Для
Integer
типов используют:источник
toString()
методаString myString = myIntegerObject.toString();
Нет. Каждый объект может быть преобразован в
java.lang.Object
, а не вString
. Если вам нужно строковое представление любого объекта, вы должны вызватьtoString()
метод; это не то же самое, что преобразование объекта в строку.источник
Объекты можно преобразовать в строку с помощью
toString()
метода:По поводу кастинга такого правила нет . Чтобы приведение работало, объект должен действительно быть того типа, к которому вы выполняете приведение.
источник
Вы не можете отбрасывать явно ничего к
String
что неString
. Вы должны использовать либо:или:
или:
Я предпочитаю вторую форму, но считаю, что это личный выбор.
Редактировать ОК, вот почему я предпочитаю вторую форму. Первая форма при компиляции могла создавать экземпляр
StringBuffer
(в Java 1.4) илиStringBuilder
в 1.5; еще одна вещь, которую нужно собрать мусором. Насколько я могу судить, компилятор не оптимизирует это. Вторая форма также имеет аналог,Integer.toString(myInt, radix)
который позволяет вам указать, хотите ли вы шестнадцатеричный, восьмеричный и т. Д. Если вы хотите быть последовательным в своем коде (чисто эстетически, я думаю), вторую форму можно использовать в большем количестве мест.Изменить 2 Я предположил, что вы имели в виду, что ваше целое число было,
int
а неInteger
. Если он уже естьInteger
, просто используйтеtoString()
его и готово.источник
myIntegerObject.toString()
.Вы должны вызвать myIntegerObject.toString (), если хотите строковое представление.
источник
Приведение отличается от преобразования в Java, если использовать неформальную терминологию.
Приведение объекта означает, что объект уже является тем, к чему вы его приводите, и вы просто сообщаете об этом компилятору. Например, если у меня есть
Foo
ссылка, которая, как я знаю, являетсяFooSubclass
экземпляром, то(FooSubclass)Foo
компилятор сообщает компилятору: «Не меняйте экземпляр, просто знайте, что это на самом делеFooSubclass
.С другой стороны, an не
Integer
является a , хотя (как вы указываете) существуют методы для получения a , представляющего . Поскольку ни один экземпляр не может быть a , вы не можете преобразовать его в .String
String
Integer
Integer
String
Integer
String
источник
В вашем случае кастинг не требуется, вам нужен вызов toString ().
Кастинг. Как это работает?
Дано:
A и B в одном дереве наследования, и мы можем это:
Компилятор должен разрешать вещи, которые могут работать во время выполнения. Однако, если компилятор на 100% знает, что приведение не может работать, компиляция завершится ошибкой.
Дано:
Ошибка: неконвертируемые типы B1 и B2. Компилятор на 100% знает, что приведение не может работать. Но вы можете обмануть компилятор:
но в любом случае во время выполнения:
Исключение в потоке "main" java.lang.ClassCastException: B1 не может быть преобразован в B2
в твоем случае:
во время выполнения: исключение в потоке «main» java.lang.ClassCastException: java.lang.Integer не может быть преобразован в java.lang.String
источник
Используйте String.valueOf (целое число) .
Он возвращает строковое представление целого числа.
источник
String.valueOf(integer)
Вместо этого используйте .toString, как показано ниже:
источник