看一下这个代码示例

val list = mutableListOf("1", "2", "3")

val listOfLists = mutableListOf(list, list, list)

val firstList = listOfLists[0]     //get reference to *list* variable

firstList[0] = "Hello"            // replace "1" in firstList with "Hello"

print(listOfLists)

这是打印输出
[[Hello, 2, 3], [Hello, 2, 3], [Hello, 2, 3]]

如果您发现listOfLists变量从未在中再次调用,但是它没有被更新。而且更新不仅在第一个位置,而且还在所有位置更新。

我的意图是仅更新firstList变量。

为什么会发生这种情况,我该如何解决?

最佳答案

Java将变量作为引用处理,因此Kotlin也是如此。因此,所有引用在更新一个后都会更改。您必须使用列表的副本以确保独立更新:

val list = listOf("1", "2", "3")
val listOfLists = mutableListOf(
            list.toMutableList(),
            list.toMutableList(),
            list.toMutableList())

val firstList = listOfLists[0]
firstList[0] = "Hello"
print(listOfLists)

关于kotlin - 为什么Kotlin嵌套列表具有此行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53985639/

10-10 05:01