gpt4 book ai didi

kotlin - Kotlin 中的 IntArray 与 Array

转载 作者:IT老高 更新时间:2023-10-28 13:26:40 27 4
gpt4 key购买 nike

我不确定 Kotlin 中 IntArrayArray<Int> 之间的区别是什么,以及为什么我不能互换使用它们:

missmatch

我知道 IntArray 在定位 int[] 时会转换为 JVM ,但是 Array<Int> 会转换成什么?

此外,您还可以使用 String[]YourObject[] 。为什么 Kotlin 有 {primitive}Array 类型的类,而几乎任何东西都可以排列成一个数组,而不仅仅是基元。

最佳答案

Array<Int>Integer[]在引擎盖下,而 IntArrayint[] .就是这样。

这意味着当您输入 IntArray<Int> ,它将始终被装箱(具体来说,使用 Integer.valueOf() 调用)。在 IntArray 的情况下,不会发生装箱,因为它会转换为 Java 原始数组。


除了上述可能的性能影响之外,还需要考虑便利性。原始数组可以保持未初始化,它们将具有默认 0所有指标的值。这就是为什么IntArray其余的原始数组都有只接受大小参数的构造函数:

val arr = IntArray(10)
println(arr.joinToString()) // 0, 0, 0, 0, 0, 0, 0, 0, 0, 0

相比之下,Array<T>没有只接受大小参数的构造函数:它需要有效的、非空的 T创建后所有索引处的实例都处于有效状态。对于Number类型,这可能是默认的 0 ,但无法创建任意类型的默认实例 T .

所以在创建 Array<Int> 时,您也可以使用带有初始化函数的构造函数:

val arr = Array<Int>(10) { index -> 0 }  // full, verbose syntax
val arr = Array(10) { 0 } // concise version

或者创建一个 Array<Int?>以避免必须初始化每个值,但随后您将被迫处理可能的 null每次从数组中读取的值。

val arr = arrayOfNulls<Int>(10)

关于kotlin - Kotlin 中的 IntArray 与 Array<Int>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45090808/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com