Ich habe eine seltsame Ausnahme gefunden:
java.lang.ClassCastException: java.lang.Integer
cannot be cast to java.lang.String
Wie kann es möglich sein? Jedes Objekt kann in String umgewandelt werden, nicht wahr?
Der Code lautet:
String myString = (String) myIntegerObject;
Vielen Dank.
toString()
Methode, die es in einen String konvertiert. Wie mehrere Antworten zeigen, sollten Sie dies verwenden. (Für einige Objekte wirdtoString()
keine sehr nützliche Zeichenfolge zurückgegeben, aber fürInteger
wahrscheinlich genau das, was Sie möchten.)""+myIntegerObject
funktioniert auch :)Integer.toString(IntegerObject)
und er hat mir diesen Fehler gegeben, aber er ist zufrieden mitIntegerObject.toString()
... Und ja, das ist wirklich eine Ganzzahl, und ich habe diesen Fehler wirklich erhalten ...String.valueOf()
funktioniert eigentlich nur ...Antworten:
Warum das nicht möglich ist:
Weil String und Integer nicht in derselben Objekthierarchie liegen.
Das Casting, das Sie versuchen, funktioniert nur, wenn sie sich in derselben Hierarchie befinden, z
In diesem Fall
(A) objB
oder(Object) objB
oder(Object) objA
wird funktionieren.Daher, wie andere bereits erwähnt haben, um eine Ganzzahl in eine Zeichenfolge umzuwandeln:
String.valueOf(integer)
oderInteger.toString(integer)
für primitive,oder
Integer.toString()
für das Objekt.quelle
(B) objA
wird nicht funktionieren.(A) objA
und(B) objB
wird funktionieren.Nein,
Integer
und esString
gibt verschiedene Typen. Um eine Ganzzahl in einen String umzuwandeln, verwenden Sie:String.valueOf(integer)
oderInteger.toString(integer)
für das Grundelement oderInteger.toString()
für das Objekt.quelle
Für
int
Typen verwenden Sie:Für
Integer
Typen verwenden Sie:quelle
toString()
Methode zu verwenden istString myString = myIntegerObject.toString();
Nein. Jedes Objekt kann zu einem gegossen werden
java.lang.Object
, nicht zu einemString
. Wenn Sie eine Zeichenfolgendarstellung für ein beliebiges Objekt wünschen, müssen Sie dietoString()
Methode aufrufen . Dies ist nicht dasselbe wie das Umwandeln des Objekts in einen String.quelle
Objekte können mit der folgenden Methode in eine Zeichenfolge konvertiert
toString()
werden:Es gibt keine solche Regel für das Casting . Damit das Casting funktioniert, muss das Objekt tatsächlich von dem Typ sein, auf den Sie das Casting durchführen.
quelle
Sie können nicht explizit etwas auf ein übertragen
String
, das kein istString
. Sie sollten entweder verwenden:oder:
oder:
Ich bevorzuge die zweite Form, aber ich denke, es ist eine persönliche Wahl.
Bearbeiten OK, hier ist, warum ich die zweite Form bevorzuge. Die erste Form könnte beim Kompilieren a
StringBuffer
(in Java 1.4) oder aStringBuilder
in 1.5 instanziieren . eine weitere Sache, um Müll gesammelt zu werden. Der Compiler optimiert dies nicht, soweit ich das beurteilen kann. Das zweite Formular hat auch ein Analogon, mitInteger.toString(myInt, radix)
dem Sie angeben können, ob Sie Hex, Oktal usw. möchten. Wenn Sie in Ihrem Code konsistent sein möchten (rein ästhetisch, denke ich), kann das zweite Formular an mehreren Stellen verwendet werden.Bearbeiten 2 Ich nahm an, Sie meinten, Ihre ganze Zahl sei eine
int
und keineInteger
. Wenn es bereits ein istInteger
, verwenden SietoString()
es einfach und fertig.quelle
myIntegerObject.toString()
.Sie sollten myIntegerObject.toString () aufrufen, wenn Sie die Zeichenfolgendarstellung wünschen.
quelle
Casting unterscheidet sich von der Konvertierung in Java, um informelle Terminologie zu verwenden.
Das Umwandeln eines Objekts bedeutet, dass das Objekt bereits das ist, in das Sie es umwandeln, und Sie erzählen dem Compiler nur davon. Wenn ich beispielsweise eine
Foo
Referenz habe, von der ich weiß, dass sie eineFooSubclass
Instanz ist,(FooSubclass)Foo
sagt der Compiler: "Ändern Sie die Instanz nicht, sondern wissen Sie nur, dass es sich tatsächlich um eine Instanz handeltFooSubclass
."Auf der anderen Seite
Integer
ist an kein aString
, obwohl es (wie Sie hervorheben) Methoden gibt, um ein zu erhaltenString
, das ein darstelltInteger
. Da keine keine InstanzInteger
jemals eine seinString
, kann man nicht werfenInteger
zuString
.quelle
Wenn Sie kein Casting benötigen, müssen Sie toString () aufrufen.
Casting. Wie funktioniert es?
Gegeben:
A und B im selben Vererbungsbaum und wir können dies:
Der Compiler muss Dinge zulassen, die möglicherweise zur Laufzeit funktionieren. Wenn der Compiler jedoch zu 100% weiß, dass die Besetzung möglicherweise nicht funktionieren kann, schlägt die Kompilierung fehl.
Gegeben:
Fehler: Nicht konvertierbare Typen B1 und B2. Der Compiler weiß zu 100%, dass die Besetzung unmöglich funktionieren könnte. Aber du kannst den Compiler betrügen:
aber trotzdem zur Laufzeit:
Ausnahme im Thread "main" java.lang.ClassCastException: B1 kann nicht in B2 umgewandelt werden
in deinem Fall:
zur Laufzeit: Ausnahme im Thread "main" java.lang.ClassCastException: java.lang.Integer kann nicht in java.lang.String umgewandelt werden
quelle
Verwenden Sie String.valueOf (Ganzzahl) .
Es gibt eine Zeichenfolgendarstellung der Ganzzahl zurück.
quelle
String.valueOf(integer)
Verwenden Sie stattdessen .toString wie folgt:
quelle