Jika Anda tidak membutuhkan transmisi, Anda perlu memanggil toString ().
Integer i = 33;
String s = i.toString();
//or
s = String.valueOf(i);
//or
s = "" + i;
Pengecoran. Bagaimana cara kerjanya?
Diberikan:
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 dan B dalam pohon warisan yang sama dan kita dapat melakukannya:
a = new A();
b = (B)a; // again downcast. Compiles but fails later, at runtime: java.lang.ClassCastException
Kompilator harus mengizinkan hal-hal yang mungkin berfungsi saat runtime. Namun, jika kompilator mengetahui dengan 100% bahwa cast tidak mungkin bekerja, kompilasi akan gagal.
Diberikan:
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
Kesalahan: Tipe B1 dan B2 yang tidak dapat diubah. Kompilator mengetahui dengan 100% bahwa cast tidak mungkin bekerja. Tetapi Anda bisa menipu kompiler:
B2 b2 = (B2)(A)b1;
tetapi bagaimanapun juga saat runtime:
Pengecualian di utas "main" java.lang.ClassCastException: B1 tidak dapat ditransmisikan ke B2
dalam kasus Anda:
(Objek)
/ \
(Integer) (String)
Integer i = 33;
//String s = (String)i; - compiler error
String s = (String)(Object)i;
saat runtime: Pengecualian di thread "main" java.lang.ClassCastException: java.lang.Integer tidak dapat ditransmisikan ke java.lang.String
toString()
metode yang akan mengubahnya menjadi String. Seperti yang ditunjukkan oleh beberapa jawaban, itulah yang harus Anda gunakan. (Untuk beberapa objek,toString()
tidak mengembalikan string yang sangat berguna , tetapi untukInteger
, itu mungkin melakukan apa yang Anda inginkan.)