Array<Int>
bir bir Integer[]
ise, başlık altında IntArray
bir bir int[]
. Bu kadar.
Bu Int
, bir içine bir koyduğunuzda Array<Int>
, her zaman kutulu olacağı anlamına gelir (özellikle, bir Integer.valueOf()
çağrı ile). Böyle bir durumda, IntArray
bir Java ilkel dizisine çevrildiği için kutulama gerçekleşmez.
Yukarıdakilerin olası performans etkileri dışında, dikkate alınması gereken kolaylıklar da vardır. İlkel diziler başlatılmadan bırakılabilir ve 0
tüm dizinlerde varsayılan değerlere sahip olurlar . Bu nedenle IntArray
, ilkel dizilerin geri kalanının yalnızca bir boyut parametresi alan yapıcıları vardır:
val arr = IntArray(10)
println(arr.joinToString())
Bunun aksine, Array<T>
yalnızca boyut parametresi alan bir kurucuya sahip değildir: T
oluşturulduktan sonra geçerli bir durumda olması için tüm dizinlerde geçerli, boş olmayan örneklere ihtiyaç duyar . Türler için Number
bu bir varsayılan olabilir 0
, ancak rastgele bir türün varsayılan örneklerini oluşturmanın bir yolu yoktur T
.
Yani bir oluştururken Array<Int>
, bir başlatıcı işlevi de alan yapıcıyı kullanabilirsiniz:
val arr = Array<Int>(10) { index -> 0 }
val arr = Array(10) { 0 }
Veya Array<Int?>
her değeri başlatmak zorunda kalmamak için bir tane oluşturun , ancak daha sonra null
diziden her okuduğunuzda olası değerlerle uğraşmaya zorlanacaksınız .
val arr = arrayOfNulls<Int>(10)
Array<Int>
için derlerInteger[]
(derleyici bu duruma yoksa)