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[]
ไพเลอร์ (ถ้าคอมไพเลอร์ไม่ปรับให้เหมาะสม)