Di Java kita bisa mendeklarasikan array menggunakan yang berikut ini:
String[] array = new String[10];
int size = array.length;
Apakah ini berarti bahwa array itu sendiri adalah sebuah objek? Saya bertanya, karena dalam C ++ sebuah array hanyalah sebuah pointer dan tidak memiliki metode apa pun.
if (array instanceof Object) System.out.println("Yes!")
&x
,p+i
dannew int(42)
.Jawaban:
Iya.
Spesifikasi Bahasa Java bagian 4.3.1 dimulai dengan:
sumber
Iya; Spesifikasi Bahasa Java menulis :
sumber
Nah, mari kita tanya Java!
public class HelloWorld { public static void main(String[] args) { System.out.println(args instanceof Object); int[] someIntegers = new int[] {42}; System.out.println(someIntegers instanceof Object); } }
Keluaran:
true true
sumber
int[] someIntegers = {42};
, ke hasil yang sama.Ya, ini adalah objek di Jawa.
Juga perhatikan bahwa ketika Anda melakukannya
array.length
Anda tidak memanggil metode apa pun tetapi hanya mengakses bidang arraylength
. Ada banyak metode statis di kelas Array .sumber
Penting untuk diperhatikan bahwa array di Java memiliki kode byte sendiri yang tidak dibagikan dengan objek. Mereka memang Object, tapi ditangani sedikit berbeda pada level rendah.
sumber
Saya akan mengatakan jawabannya adalah ya, meskipun saya dapat menambahkan bahwa, sebenarnya, array juga merupakan objek dalam C ++. Dari §1.8 [intro.object] dari standar saat ini (FDIS):
sumber
Saya hanya ingin menambahkan bahwa array memiliki representasi dalam API refleksi - java.lang.reflect.Array .
sumber
Setiap array di java adalah objek ex int [] a = new int [2]; Jadi new digunakan untuk membuat sebuah objek dan karena itu adalah sebuah objek kita bisa memeriksa nama kelas hanya menggunakan a.getClass (). GetName ();
sumber
java.util.Object
(new int[1]) instanceof Object // -> evaluates to true
java.util.Arrays
adalah kelas pembantu, dan array bukanlah instance dari kelas ini.(new int[1]) instanceof java.util.Arrays // -> compile error
java.lang.reflect.Array
adalah kelas pembantu, dan array bukanlah instance dari kelas ini.(new int[1]) instanceof java.lang.reflect.Array // -> compile error
Array mewarisi semua anggota
java.lang.Object
Array menggantikan metode yang
clone()
diwarisiObject
.Array mengimplementasikan bidang
length
, yang berisi jumlah komponen larik. panjangnya mungkin positif atau nol. Inipublic
danfinal
.Array mengimplementasikan antarmuka
Cloneable
danjava.io.Serializable
.8a. Array didukung oleh
Class<T>
. Anda dapat mengambilClass<T>
instance dari instance array(new int[2]).getClass()
atau dari tipe array
int[].class
8b. Instance kelas refleksi unik (yaitu instance dari
java.lang.Class<T>
) dibuat untuk setiap jenis array yang berbeda dalam kode Anda. Contohint[].class.getCanonicalName() // -> "int[]" String[].class.getCanonicalName() // -> "java.lang.String[]" /
REFERENSI
Dari spesifikasi Java Bagian 4.3.1 Objek
Objek adalah turunan kelas atau larik.
Sebuah instance kelas secara eksplisit dibuat oleh ekspresi pembuatan instance kelas.
Sebuah array secara eksplisit dibuat oleh ekspresi pembuatan array.
Dari java.util.Arrays
Dari java.lang.reflect.Array
Dari Bagian 10.1 Objek
Superkelas langsung dari tipe array adalah
Object
.Setiap tipe array mengimplementasikan antarmuka
Cloneable
danjava.io.Serializable
.Dari Bagian 10.7 Anggota Array
Anggota tipe array adalah semua dari berikut ini:
Bidang final publik
length
, yang berisi jumlah komponen larik. panjangnya mungkin positif atau nol.Metode publik
clone
, yang mengganti metode dengan nama yang sama di kelasObject
dan tidak menampilkan pengecualian yang dicentang. Tipe kembalian dariclone
metode tipe arrayT[]
adalahT[]
.Klon dari larik multidimensi bersifat dangkal, artinya ia hanya membuat larik baru. Subarray dibagikan.
Semua anggota diwarisi dari Object kelas; satu-satunya metode Objek yang tidak diwariskan adalah metode klonnya.
sumber
Array dari apapun adalah obyek. Seseorang dapat memanggil metode seperti
equals
,hashcode
dll:final int[] i = {}; i.equals(new int[] {1}); // false i.hashcode();
Seseorang tidak dapat memanggil metode pada tipe asli.
sumber
Amati cuplikan kode dan keluaran di bawah ini.
public class Tester { int a[]; public static void main(String[] args) { System.out.println(new Tester().a);// null System.out.println(new Tester().a[0]);// Exception in thread "main" java.lang.NullPointerException \n at mainclass.Tester.main(Tester.java:10) }
}
jelas array a diperlakukan sebagai objek.
sumber
Ya, dokumen mengatakan demikian:
Perhatikan bahwa tipe array dari tipe primitif (seperti
int[]
atauchar[]
) itu sendiri juga merupakan objek.Setiap larik secara langsung memperluas
java.lang.Object
dan mengimplementasikan antarmukajavs.lang.Cloneable
danjava.io.Serializable
. Tanda tangan tipe runtime dari sebuah array[L
segera diikuti nama kelas dari tipe komponen (mis[Ljava.lang.String
.). Array tipe primitif memiliki tanda tangan runtime berikut:[B
untukbyte[]
;[S
untukshort[]
;[I
untukint[]
;[J
untuklong[]
;[F
untukfloat[]
;[D
untukdouble[]
;[C
untukchar[]
.sumber