Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我可以在Kotlin中将可变列表实例化为val(并向其添加元素)?_Kotlin - Fatal编程技术网

为什么我可以在Kotlin中将可变列表实例化为val(并向其添加元素)?

为什么我可以在Kotlin中将可变列表实例化为val(并向其添加元素)?,kotlin,Kotlin,我刚刚开始学习Kotlin,所以我播放了一段视频,展示了许多常见的Kotlin习语: 就在视频的1:03:10点,演示者讨论了可变集合和不可变集合。正如您在视频中看到的,他创建了一个带有var关键字的可变列表和一个带有val关键字的不可变列表。我很好奇,如果我尝试将val与可变列表一起使用,会发生什么错误;我认为这是不允许的,这个想法会显示这样一个信息,但它没有给我错误信息。然后我在可变列表中添加了一个元素,这也没有导致错误!当我显示MutableList的最后一个元素时,它显示了我添加的元素,

我刚刚开始学习Kotlin,所以我播放了一段视频,展示了许多常见的Kotlin习语:

就在视频的1:03:10点,演示者讨论了可变集合和不可变集合。正如您在视频中看到的,他创建了一个带有var关键字的可变列表和一个带有val关键字的不可变列表。我很好奇,如果我尝试将val与可变列表一起使用,会发生什么错误;我认为这是不允许的,这个想法会显示这样一个信息,但它没有给我错误信息。然后我在可变列表中添加了一个元素,这也没有导致错误!当我显示MutableList的最后一个元素时,它显示了我添加的元素,因此它不仅没有给我一个错误,而且成功地将一个元素添加到我认为是不可变的东西中

为什么我的代码可以工作?我不敢相信像我这样一个完全的Kotlin初学者在Kotlin中发现了一个基本的bug,所以肯定还有别的东西在发生。有人能解释一下吗

这是我的密码:

val list3: MutableList<Int> = mutableListOf(6,7,8) 
list3.add(5)
println("list3 last item: ${list3.last()}")

val
仅表示变量本身无法重新分配。它没有说明变量中的对象是否可变

如果您尝试这样做,您将得到一个错误

 val list3: MutableList<Int> = mutableListOf(6,7,8)
 list3 = mutableListOf(1,2,3)   // cannot re-assign to val
vallist3:MutableList=mutableListOf(6,7,8)
list3=mutableListOf(1,2,3)//无法重新分配给val

val
仅表示变量本身无法重新分配。它没有说明变量中的对象是否可变

如果您尝试这样做,您将得到一个错误

 val list3: MutableList<Int> = mutableListOf(6,7,8)
 list3 = mutableListOf(1,2,3)   // cannot re-assign to val
vallist3:MutableList=mutableListOf(6,7,8)
list3=mutableListOf(1,2,3)//无法重新分配给val

val
表示值,因此您可以将该
val
分配给对象一次,就像Java中的
final
关键字一样。再次尝试重新分配
val
时,将发生错误

    val list3: MutableList<Int> = mutableListOf(6,7,8) 
    list3.add(5)
    println("list3 last item: ${list3.last()}")
在上面的例子中,由于我们试图分配
list3
一个
mutableList


希望它有帮助

val
意味着值,这样您就可以将
val
分配给一个对象一次,就像Java中的
final
关键字一样。再次尝试重新分配
val
时,将发生错误

    val list3: MutableList<Int> = mutableListOf(6,7,8) 
    list3.add(5)
    println("list3 last item: ${list3.last()}")
在上面的例子中,由于我们试图分配
list3
一个
mutableList

希望能有帮助