看看这个代码示例
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
变量。
为什么会发生这种情况,我该如何解决?
答案 0 :(得分:4)
答案 1 :(得分:2)
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)
答案 2 :(得分:2)
问题
您要在另一个列表中放置三个引用到同一列表。通过这些引用之一更改列表将更改所有引用指向的数据。
解决方案
如果您不想创建<a class="tile checklogin" href="javascript:void(0);" data-toggle="modal" refcon="hotels/bkhtl/1" data-target="#login">
<a class="tile checklogin" href="javascript:void(0);" data-toggle="modal" refcon="hotels/bkhtl/2" data-target="#login">
<a class="tile checklogin" href="javascript:void(0);" data-toggle="modal" refcon="hotels/bkhtl/3" data-target="#login">
的三个独立副本,例如使用扩展功能toMutableList()
:
list
输出:
[[Hello,2,3],[1、2、3],[1、2、3]]