Wenn Sie kein Casting benötigen, müssen Sie toString () aufrufen.
Integer i = 33;
String s = i.toString();
//or
s = String.valueOf(i);
//or
s = "" + i;
Casting. Wie funktioniert es?
Gegeben:
class A {}
class B extends A {}
(A)
|
(B)
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 und B im selben Vererbungsbaum und wir können dies:
a = new A();
b = (B)a; // again downcast. Compiles but fails later, at runtime: java.lang.ClassCastException
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:
class A {}
class B1 extends A {}
class B2 extends A {}
(A)
/ \
(B1) (B2)
B1 b1 = new B1();
B2 b2 = (B2)b1; // B1 can't ever be a B2
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:
B2 b2 = (B2)(A)b1;
aber trotzdem zur Laufzeit:
Ausnahme im Thread "main" java.lang.ClassCastException: B1 kann nicht in B2 umgewandelt werden
in deinem Fall:
(Objekt)
/ \
(Ganzzahl) (Zeichenfolge)
Integer i = 33;
//String s = (String)i; - compiler error
String s = (String)(Object)i;
zur Laufzeit: Ausnahme im Thread "main" java.lang.ClassCastException: java.lang.Integer kann nicht in java.lang.String umgewandelt werden
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.)