Array<Int>
adalah di Integer[]
bawah tenda, sedangkan IntArray
adalah int[]
. Itu dia.
Ini berarti bahwa ketika Anda menempatkan Int
dalam Array<Int>
, itu akan selalu kotak (khusus, dengan Integer.valueOf()
panggilan). Dalam kasus IntArray
, tidak ada tinju yang akan terjadi, karena ini diterjemahkan ke array primitif Java.
Selain kemungkinan implikasi kinerja di atas, ada juga kemudahan untuk dipertimbangkan. Array primitif dapat dibiarkan tidak diinisialisasi dan akan memiliki 0
nilai default di semua indeks. Inilah sebabnya mengapa IntArray
dan array primitif lainnya memiliki konstruktor yang hanya mengambil parameter ukuran:
val arr = IntArray(10)
println(arr.joinToString())
Sebaliknya, Array<T>
tidak memiliki konstruktor yang hanya mengambil parameter ukuran: ia memerlukan T
instance non-null yang valid di semua indeks agar berada dalam keadaan valid setelah dibuat. Untuk Number
tipe, ini bisa menjadi default 0
, tetapi tidak ada cara untuk membuat contoh default dari tipe arbitrer T
.
Jadi saat membuat Array<Int>
, Anda bisa menggunakan konstruktor yang juga menggunakan fungsi penginisialisasi:
val arr = Array<Int>(10) { index -> 0 }
val arr = Array(10) { 0 }
Atau buat Array<Int?>
untuk menghindari keharusan menginisialisasi setiap nilai, tetapi kemudian Anda akan dipaksa untuk menangani kemungkinan null
nilai setiap kali Anda membaca dari array.
val arr = arrayOfNulls<Int>(10)
Array<Int>
mengkompilasi keInteger[]
(jika kompiler tidak mengoptimalkan ini)