You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin中Array<Int>转IntArray时值丢失问题求助

问题解答

1. 为何相同函数调用出现不同输出

你描述的现象不符合Kotlin标准库的正常行为,toIntArray()的作用是将Array<Int>中的元素逐一复制到新的IntArray中,两次调用返回的数组内容应该完全一致。出现这种差异,大概率是你的代码中存在未展示的逻辑,导致test(即array[0])在test2赋值之后被意外修改了:

  • 比如后续代码重新初始化了array[0](如array[0] = Array(n) {0})
  • 或者有其他逻辑修改了array[0]的元素值
  • 极少数情况下可能是Kotlin版本或IDE的临时bug,但这种概率极低

你可以检查代码中val test2 = test.toIntArray()之后的部分,是否存在对array[0]或test的修改操作。如果仅运行你提供的代码片段,输出应该是三次相同的[0, 1, 2, 3, 4, 5]。

2. 二维数组场景下Array<Int>转IntArray的正确方法

方法一:直接使用toIntArray()

只要确保转换时原数组的元素已经确定且后续不会被意外修改,直接调用toIntArray()就是正确的:

val row: Array<Int> = array[0]
val intArrayRow: IntArray = row.toIntArray()

该方法会创建一个新的IntArray,将原Array<Int>的元素逐一复制进去,后续修改原Array<Int>不会影响已转换的IntArray。

方法二:提前使用基本类型二维数组避免转换

如果你的场景不需要Array<Array<Int>>(引用类型数组),可以直接初始化Array<IntArray>(基本类型数组的二维结构),这样每行本身就是IntArray,无需转换:

val n = 6
val array = Array(n) { IntArray(n) } // 每行都是IntArray

// 赋值逻辑不变
for (i in 0..5) {
    for (j in 0..5) {
        array[i][j] = i + j
    }
}

val test = array[0] // test本身就是IntArray,直接使用即可
println(test.contentToString())

内容的提问来源于stack exchange,提问作者foseja

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 07:30:13