Array<Int>คือInteger[]ภายใต้ประทุนในขณะIntArrayที่int[]. แค่นั้นแหละ.
ซึ่งหมายความว่าเมื่อคุณใส่IntในArray<Int>ก็จะถูกบรรจุอยู่ในกล่อง (เฉพาะที่มีInteger.valueOf()การเรียกร้อง) ในกรณีนี้IntArrayจะไม่มีการชกมวยเกิดขึ้นเนื่องจากแปลเป็นอาร์เรย์ดั้งเดิมของ Java
นอกเหนือจากผลกระทบด้านประสิทธิภาพที่เป็นไปได้ข้างต้นแล้วยังมีความสะดวกในการพิจารณาด้วย อาร์เรย์แบบดั้งเดิมสามารถปล่อยทิ้งไว้โดยไม่กำหนด0ค่าเริ่มต้นและจะมีค่าเริ่มต้นที่ดัชนีทั้งหมด นี่คือเหตุผลIntArrayและส่วนที่เหลือของอาร์เรย์ดั้งเดิมมีตัวสร้างที่ใช้พารามิเตอร์ขนาดเท่านั้น:
val arr = IntArray(10)
println(arr.joinToString())
ในทางตรงกันข้ามArray<T>ไม่มีตัวสร้างที่รับเฉพาะพารามิเตอร์ขนาด: ต้องใช้Tอินสแตนซ์ที่ไม่เป็นค่าว่างที่ถูกต้องที่ดัชนีทั้งหมดอยู่ในสถานะที่ถูกต้องหลังการสร้าง สำหรับNumberประเภทอาจเป็นค่าเริ่มต้น0แต่ไม่มีวิธีใดในการสร้างอินสแตนซ์เริ่มต้นของประเภทที่กำหนดเองTแต่มีวิธีที่จะสร้างอินสแตนซ์เริ่มต้นของประเภทโดยพลการไม่มี
ดังนั้นเมื่อสร้าง an Array<Int>คุณสามารถใช้ตัวสร้างที่ใช้ฟังก์ชัน initializer ได้เช่นกัน:
val arr = Array<Int>(10) { index -> 0 }
val arr = Array(10) { 0 }
หรือสร้างArray<Int?>เพื่อหลีกเลี่ยงการเริ่มต้นทุกค่า แต่หลังจากนั้นคุณจะถูกบังคับให้จัดการกับnullค่าที่เป็นไปได้ทุกครั้งที่อ่านจากอาร์เรย์
val arr = arrayOfNulls<Int>(10)
Array<Int>คอมInteger[]ไพเลอร์ (ถ้าคอมไพเลอร์ไม่ปรับให้เหมาะสม)