Saya mendapatkan ini ketika saya memanggil toStringobjek yang saya terima dari panggilan fungsi. Saya tahu jenis objek yang dikodekan dalam string ini, tetapi saya tidak tahu cara membacanya.
Apa nama jenis pengkodean ini?
Saya mendapatkan ini ketika saya memanggil toStringobjek yang saya terima dari panggilan fungsi. Saya tahu jenis objek yang dikodekan dalam string ini, tetapi saya tidak tahu cara membacanya.
Apa nama jenis pengkodean ini?
Jawaban:
[Ljava.lang.Object;adalah nama untuk Object[].class, java.lang.Classmewakili kelas dari array Object.
Skema penamaan didokumentasikan di Class.getName():
Jika objek kelas ini mewakili tipe referensi yang bukan tipe larik maka nama biner kelas akan dikembalikan, seperti yang ditentukan oleh Spesifikasi Bahasa Java ( §13.1 ).
Jika objek kelas ini mewakili tipe primitif atau
void, maka nama yang dikembalikan adalah kata kunci bahasa Java yang sesuai dengan tipe primitif atauvoid.Jika objek kelas ini mewakili kelas larik, maka bentuk internal namanya terdiri dari nama jenis elemen yang diawali dengan satu atau lebih
'['karakter yang mewakili kedalaman penumpukan larik. Pengkodean nama jenis elemen adalah sebagai berikut:Element Type Encoding boolean Z byte B char C double D float F int I long J short S class or interface Lclassname;
Milik Anda adalah yang terakhir dalam daftar itu. Berikut beberapa contohnya:
// xxxxx varies
System.out.println(new int[0][0][7]); // [[[I@xxxxx
System.out.println(new String[4][2]); // [[Ljava.lang.String;@xxxxx
System.out.println(new boolean[256]); // [Z@xxxxx
Alasan mengapa toString()metode pada array kembali Stringdalam format ini adalah karena array bukan @Overridemetode yang diwarisi Object, yang ditentukan sebagai berikut:
The
toStringmetode untuk kelasObjectmengembalikan sebuah string yang terdiri dari nama kelas yang objek adalah sebuah contoh, karakter di-tanda `@', dan heksadesimal representasi unsigned kode hash objek. Dengan kata lain, metode ini mengembalikan string yang sama dengan nilai:getClass().getName() + '@' + Integer.toHexString(hashCode())
Catatan : Anda tidak dapat bergantung padatoString()sembarang objek untuk mengikuti spesifikasi di atas, karena mereka dapat (dan biasanya melakukannya)@Overrideuntuk mengembalikan sesuatu yang lain. Cara yang lebih dapat diandalkan untuk memeriksa jenis objek arbitrer adalah dengan memanggilnyagetClass()(finalmetode yang diwarisi dariObject) dan kemudian merefleksikanClass objek yangdikembalikan. Idealnya, API harus dirancang sedemikian rupa sehingga refleksi tidak diperlukan (lihat Efektif Java 2nd Edition, Item 53: Lebih suka antarmuka untuk refleksi ).
toStringuntuk arrayjava.util.Arraysmenyediakan toStringkelebihan beban untuk array primitif dan Object[]. Ada juga deepToStringyang mungkin ingin Anda gunakan untuk array bersarang.
Berikut beberapa contohnya:
int[] nums = { 1, 2, 3 };
System.out.println(nums);
// [I@xxxxx
System.out.println(Arrays.toString(nums));
// [1, 2, 3]
int[][] table = {
{ 1, },
{ 2, 3, },
{ 4, 5, 6, },
};
System.out.println(Arrays.toString(table));
// [[I@xxxxx, [I@yyyyy, [I@zzzzz]
System.out.println(Arrays.deepToString(table));
// [[1], [2, 3], [4, 5, 6]]
Ada juga Arrays.equalsdanArrays.deepEquals yang melakukan berbagai kesetaraan perbandingan oleh unsur-unsur mereka, di antara banyak metode utilitas terkait array lainnya.