J'ai trouvé une exception étrange:
java.lang.ClassCastException: java.lang.Integer
cannot be cast to java.lang.String
Comment cela peut-il être possible? Chaque objet peut être converti en String, n'est-ce pas?
Le code est:
String myString = (String) myIntegerObject;
Merci.
toString()
méthode qui le convertira en String. Comme plusieurs réponses le soulignent, c'est ce que vous devez utiliser. (Pour certains objets,toString()
ne renvoie pas une chaîne très utile , mais pourInteger
, il fait probablement exactement ce que vous voulez.)""+myIntegerObject
fonctionne aussi :)Integer.toString(IntegerObject)
et cela m'a donné cette erreur, mais c'est content deIntegerObject.toString()
... Et oui, c'est vraiment un Integer, et j'ai vraiment eu cette erreur ...String.valueOf()
fonctionne que réellement ...Réponses:
Pourquoi ce n'est pas possible:
Parce que String et Integer ne sont pas dans la même hiérarchie d'objets.
Le casting que vous essayez, ne fonctionne que s'ils sont dans la même hiérarchie, par exemple
Dans ce cas,
(A) objB
ou(Object) objB
ou(Object) objA
fonctionnera.Par conséquent, comme d'autres l'ont déjà mentionné, pour convertir un entier en chaîne, utilisez:
String.valueOf(integer)
, ouInteger.toString(integer)
pour primitif,ou
Integer.toString()
pour l'objet.la source
(B) objA
ne fonctionnera pas.(A) objA
et(B) objB
fonctionnera.Non,
Integer
etString
sont de types différents. Pour convertir un entier en chaîne, utilisez:,String.valueOf(integer)
ouInteger.toString(integer)
pour primitive, ouInteger.toString()
pour l'objet.la source
Pour les
int
types, utilisez:Pour les
Integer
types, utilisez:la source
toString()
méthodeString myString = myIntegerObject.toString();
Non. Chaque objet peut être lancé en un
java.lang.Object
, pas en unString
. Si vous voulez une représentation sous forme de chaîne de n'importe quel objet, vous devez appeler latoString()
méthode; ce n'est pas la même chose que de convertir l'objet en String.la source
Les objets peuvent être convertis en chaîne à l'aide de la
toString()
méthode:Il n'y a pas de règle de ce genre concernant le casting . Pour que la diffusion fonctionne, l'objet doit en fait être du type vers lequel vous effectuez la diffusion.
la source
Vous ne pouvez pas lancer explicitement quoi
String
que ce soit dans un qui n'est pas unString
. Vous devez utiliser soit:ou:
ou:
Je préfère la deuxième forme, mais je pense que c'est un choix personnel.
Modifier OK, voici pourquoi je préfère la deuxième forme. La première forme, une fois compilée, pouvait instancier a
StringBuffer
(en Java 1.4) ou aStringBuilder
en 1.5; encore une chose à ramasser. Le compilateur n'optimise pas cela pour autant que je sache. La deuxième forme a aussi un analogue,Integer.toString(myInt, radix)
qui vous permet de spécifier si vous voulez hex, octal, etc. Si vous voulez être cohérent dans votre code (purement esthétique, je suppose), la deuxième forme peut être utilisée à plus d'endroits.Edit 2 J'ai supposé que vous vouliez dire que votre entier était un
int
et non unInteger
. Si c'est déjà unInteger
, utilisez-toString()
le et c'est fait.la source
myIntegerObject.toString()
.Vous devez appeler myIntegerObject.toString () si vous voulez la représentation sous forme de chaîne.
la source
La diffusion est différente de la conversion en Java, pour utiliser une terminologie informelle.
Le cast d'un objet signifie que cet objet est déjà ce vers quoi vous le castez, et vous en parlez simplement au compilateur. Par exemple, si j'ai une
Foo
référence que je sais être uneFooSubclass
instance, alors(FooSubclass)Foo
dit au compilateur, "ne changez pas l'instance, sachez simplement que c'est en fait unFooSubclass
.D'un autre côté, un
Integer
n'est pas unString
, bien que (comme vous le faites remarquer) il existe des méthodes pour obtenir unString
qui représente unInteger
. Étant donné qu'aucune instance deInteger
ne peut jamais être unString
, vous ne pouvez pas lancerInteger
de casString
.la source
Dans votre cas, vous n'avez pas besoin de cast, vous devez appeler toString ().
Fonderie. Comment ça marche?
Donné:
A et B dans le même arbre d'héritage et nous pouvons ceci:
Le compilateur doit autoriser les choses qui pourraient éventuellement fonctionner à l'exécution. Cependant, si le compilateur sait à 100% que la distribution ne pourrait pas fonctionner, la compilation échouera.
Donné:
Erreur: types d'inconvertibles B1 et B2. Le compilateur sait à 100% que la distribution ne pourrait pas fonctionner. Mais vous pouvez tromper le compilateur:
mais de toute façon à l'exécution:
Exception dans le thread "main" java.lang.ClassCastException: B1 ne peut pas être converti en B2
dans ton cas:
au moment de l'exécution: Exception dans le thread "main" java.lang.ClassCastException: java.lang.Integer ne peut pas être converti en java.lang.String
la source
Utilisez String.valueOf (entier) .
Il renvoie une représentation sous forme de chaîne d'un entier.
la source
String.valueOf(integer)
Utilisez plutôt .toString comme ci-dessous:
la source