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
相关产品推荐
相关产品推荐

