Array<Int>là một Integer[]dưới mui xe, trong khi IntArraylà một int[]. Đó là nó.
Điều này có nghĩa là khi bạn đặt một Intvào Array<Int>, nó sẽ luôn được đóng hộp (cụ thể là với một Integer.valueOf()cuộc gọi). Trong trường hợp của IntArray, không có quyền nào xảy ra, bởi vì nó chuyển sang một mảng nguyên thủy Java.
Ngoài các tác động hiệu suất có thể có của những điều trên, cũng có sự tiện lợi để xem xét. Các mảng ban đầu có thể không được khởi tạo và chúng sẽ có 0giá trị mặc định ở tất cả các chỉ mục. Đây là lý do tại sao IntArrayvà phần còn lại của mảng nguyên thủy có các hàm tạo chỉ nhận tham số kích thước:
val arr = IntArray(10)
println(arr.joinToString())
Ngược lại, Array<T>không có một phương thức khởi tạo chỉ nhận tham số kích thước: nó cần các cá thể hợp lệ, không rỗng Tở tất cả các chỉ mục để ở trạng thái hợp lệ sau khi tạo. Đối với Numbercác loại, đây có thể là một mặc định 0, nhưng không có cách nào để tạo các phiên bản mặc định của một loại tùy ý T.
Vì vậy, khi tạo một Array<Int>, bạn có thể sử dụng hàm tạo cũng có chức năng khởi tạo:
val arr = Array<Int>(10) { index -> 0 }
val arr = Array(10) { 0 }
Hoặc tạo một Array<Int?>để tránh phải khởi tạo mọi giá trị, nhưng sau đó bạn sẽ buộc phải xử lý nullcác giá trị có thể có mỗi khi bạn đọc từ mảng.
val arr = arrayOfNulls<Int>(10)
Array<Int>biên dịch đểInteger[](nếu trình biên dịch không tối ưu hóa này)