Encontrei alguma exceção estranha:
java.lang.ClassCastException: java.lang.Integer
cannot be cast to java.lang.String
Como isso pode ser possível? Cada objeto pode ser lançado em String, não é?
O código é:
String myString = (String) myIntegerObject;
Obrigado.
toString()
método que o converterá em String. Como várias respostas apontam, é isso que você deve usar. (Para alguns objetos,toString()
não retorna uma string muito útil , mas paraInteger
, provavelmente faz exatamente o que você deseja.)""+myIntegerObject
também funciona :)Integer.toString(IntegerObject)
e me deu esse erro, mas estou feliz comIntegerObject.toString()
... E sim, isso realmente é um inteiro, e eu realmente recebi esse erro ...String.valueOf()
funciona realmente ...Respostas:
Por que isso não é possível:
Porque String e Integer não estão na mesma hierarquia de Objetos.
O elenco que você está tentando, só funciona se eles estiverem na mesma hierarquia, por exemplo
Nesse caso,
(A) objB
ou(Object) objB
ou(Object) objA
funcionará.Portanto, como outros já mencionaram, para converter um inteiro em uma string, use:
String.valueOf(integer)
, ouInteger.toString(integer)
para primitivo,ou
Integer.toString()
para o objeto.fonte
(B) objA
não funcionará.(A) objA
e(B) objB
vai funcionar.Não,
Integer
eString
são de tipos diferentes. Para converter um inteiro em string, use:,String.valueOf(integer)
ouInteger.toString(integer)
para primitivo, ouInteger.toString()
para o objeto.fonte
Para
int
tipos, use:Para
Integer
tipos, use:fonte
toString()
métodoString myString = myIntegerObject.toString();
Não. Cada objeto pode ser convertido para um
java.lang.Object
, não umString
. Se você quiser uma representação de string de qualquer objeto, deverá invocar otoString()
método; isso não é o mesmo que lançar o objeto em uma String.fonte
Os objetos podem ser convertidos em uma string usando o
toString()
método:Não existe essa regra sobre o elenco . Para que a projeção funcione, o objeto deve realmente ser do tipo para o qual você está projetando.
fonte
Você não pode lançar explicitamente nada para um
String
que não seja umString
. Você deve usar:ou:
ou:
Prefiro a segunda forma, mas acho que é uma escolha pessoal.
Editar OK, é por isso que prefiro a segunda forma. A primeira forma, quando compilada, poderia instanciar a
StringBuffer
(em Java 1.4) ou aStringBuilder
em 1.5; mais uma coisa a ser coletada no lixo. O compilador não otimiza isso, tanto quanto eu poderia dizer. A segunda forma também tem um análogo,Integer.toString(myInt, radix)
que permite que você especifique se deseja hex, octal, etc. Se você quiser ser consistente em seu código (puramente esteticamente, eu acho), a segunda forma pode ser usada em mais lugares.Editar 2 Presumi que você quis dizer que seu inteiro era um
int
e não umInteger
. Se já for umInteger
, basta usartoString()
nele e pronto.fonte
myIntegerObject.toString()
.Você deve chamar myIntegerObject.toString () se quiser a representação de string.
fonte
Casting é diferente de converter em Java, para usar uma terminologia informal.
Casting um objeto significa que esse objeto já é o que você está lançando, e você está apenas contando ao compilador sobre isso. Por exemplo, se eu tiver uma
Foo
referência que sei ser umaFooSubclass
instância,(FooSubclass)Foo
diga ao compilador: "não altere a instância, apenas saiba que é realmente umFooSubclass
.Por outro lado, um não
Integer
é um , embora (como você assinalou) existam métodos para obter um que represente um . Como nenhuma instância de pode ser um , você não pode lançar para .String
String
Integer
Integer
String
Integer
String
fonte
No seu caso, não precisa de conversão, você precisa chamar toString ().
Casting. Como funciona?
Dado:
A e B na mesma árvore de herança e podemos:
O compilador deve permitir coisas que podem funcionar em tempo de execução. No entanto, se o compilador souber com 100% que o elenco não poderia funcionar, a compilação falhará.
Dado:
Erro: tipos não conversíveis B1 e B2. O compilador sabe com 100% que o elenco não poderia funcionar. Mas você pode enganar o compilador:
mas de qualquer maneira em tempo de execução:
Exceção no thread "principal" java.lang.ClassCastException: B1 não pode ser convertido para B2
no seu caso:
no tempo de execução: Exceção no thread "main" java.lang.ClassCastException: java.lang.Integer não pode ser convertido em java.lang.String
fonte
Use String.valueOf (inteiro) .
Ele retorna uma representação de string de inteiro.
fonte
String.valueOf(integer)
Use .toString ao invés como abaixo:
fonte