Saya menemukan beberapa pengecualian aneh:
java.lang.ClassCastException: java.lang.Integer
cannot be cast to java.lang.String
Bagaimana mungkin? Tiap objek bisa dicor ke String, bukan?
Kodenya adalah:
String myString = (String) myIntegerObject;
Terima kasih.
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.)""+myIntegerObject
juga bekerja :)Integer.toString(IntegerObject)
dan itu memberi saya kesalahan ini, tetapi senang denganIntegerObject.toString()
... Dan ya, itu benar-benar Integer, dan saya benar-benar mendapatkan kesalahan ini ...String.valueOf()
benar-benar bekerja ...Jawaban:
Mengapa ini tidak mungkin:
Karena String dan Integer tidak berada dalam hierarki Objek yang sama.
Pengecoran yang Anda coba, hanya berfungsi jika berada dalam hierarki yang sama, mis
Dalam hal ini,
(A) objB
atau(Object) objB
atau(Object) objA
akan bekerja.Karenanya seperti yang telah disebutkan orang lain, untuk mengonversi bilangan bulat menjadi string digunakan:
String.valueOf(integer)
, atauInteger.toString(integer)
untuk primitif,atau
Integer.toString()
untuk objeknya.sumber
(B) objA
tidak akan bekerja.(A) objA
dan(B) objB
akan bekerja.Tidak,
Integer
danString
berbeda tipe. Untuk mengonversi integer menjadi string, gunakan:,String.valueOf(integer)
atauInteger.toString(integer)
untuk primitif, atauInteger.toString()
untuk objek.sumber
Untuk
int
jenis penggunaan:Untuk
Integer
jenis penggunaan:sumber
toString()
metodeString myString = myIntegerObject.toString();
Tidak. Setiap benda dapat dicor ke
java.lang.Object
, bukan aString
. Jika Anda menginginkan representasi string dari objek apa pun, Anda harus memanggiltoString()
metode; ini tidak sama dengan mentransmisikan objek ke String.sumber
Objek dapat diubah menjadi string menggunakan
toString()
metode:Tidak ada aturan seperti itu tentang casting . Agar casting berfungsi, objek harus benar-benar jenis yang Anda tuju.
sumber
Anda tidak dapat mentransmisikan secara eksplisit apa pun ke
String
yang bukanString
. Anda harus menggunakan:atau:
atau:
Saya lebih suka bentuk kedua, tapi saya pikir itu pilihan pribadi.
Edit OK, inilah mengapa saya lebih suka bentuk kedua. Bentuk pertama, ketika dikompilasi, bisa memberi contoh a
StringBuffer
(di Java 1.4) atau aStringBuilder
di 1.5; satu hal lagi yang harus dikumpulkan sampah. Sejauh yang saya tahu, kompilator tidak mengoptimalkannya. Bentuk kedua juga memiliki analog,Integer.toString(myInt, radix)
yang memungkinkan Anda menentukan apakah Anda ingin hex, oktal, dll. Jika Anda ingin konsisten dalam kode Anda (secara estetika, saya rasa) formulir kedua dapat digunakan di lebih banyak tempat.Sunting 2 Saya berasumsi yang Anda maksud bahwa bilangan bulat Anda adalah an
int
dan bukanInteger
. Jika sudahInteger
, gunakantoString()
saja dan selesai.sumber
myIntegerObject.toString()
.Anda harus memanggil myIntegerObject.toString () jika Anda menginginkan representasi string.
sumber
Pengecoran berbeda dengan konversi di Jawa, menggunakan terminologi informal.
Mentransmisikan objek berarti objek tersebut sudah menjadi tujuan Anda mentransmisikannya, dan Anda hanya memberi tahu kompiler tentangnya. Misalnya, jika saya memiliki
Foo
referensi yang saya tahu adalah sebuahFooSubclass
instance, lalu(FooSubclass)Foo
memberi tahu compiler, "jangan ubah instance tersebut, ketahuilah bahwa itu sebenarnya aFooSubclass
.Di sisi lain,
Integer
adalah tidak satuString
, meskipun (seperti yang Anda tunjukkan) ada metode untuk mendapatkanString
yang mewakiliInteger
. Karena tidak ada contoh dari yangInteger
dapat menjadiString
, Anda tidak dapat mentransmisikanInteger
keString
.sumber
Jika Anda tidak membutuhkan transmisi, Anda perlu memanggil toString ().
Pengecoran. Bagaimana cara kerjanya?
Diberikan:
A dan B dalam pohon warisan yang sama dan kita dapat melakukannya:
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:
Kesalahan: Tipe B1 dan B2 yang tidak dapat diubah. Kompilator mengetahui dengan 100% bahwa cast tidak mungkin bekerja. Tetapi Anda bisa menipu kompiler:
tetapi bagaimanapun juga saat runtime:
Pengecualian di utas "main" java.lang.ClassCastException: B1 tidak dapat ditransmisikan ke B2
dalam kasus Anda:
saat runtime: Pengecualian di thread "main" java.lang.ClassCastException: java.lang.Integer tidak dapat ditransmisikan ke java.lang.String
sumber
Gunakan String.valueOf (integer) .
Ini mengembalikan representasi string dari integer.
sumber
String.valueOf(integer)
Gunakan .toString sebagai gantinya seperti di bawah ini:
sumber