该书第二章2.6小节 Lambda编程中介绍Kotlin语言的list用法,示例代码如下:
val list = mutableListOf("Apple", "Banana", "Orange", "Pear", "Grape")
list.add("Watermelon")
for (fruit in list) {
println(fruit)
}
此处产生一个小疑问,val表示list这个这个变量不可变,为什么还能执行list.add()这个语句,并且AS也不报错?
希望郭神百忙之中能答疑解惑
val list = mutableListOf("Apple", "Banana", "Orange", "Pear", "Grape")
不能执行 list = mutableListOf("change") 但能对list进行增删改
val代表list这个变量不能指向另一个变量,即物理地址不能发生改变了
但是list.add()并不影响它的物理地址,只是对这个数组进行追加数据而已
简单的理解就是,不可变是指不能把一个对象变成另一个对象,但是可以对这个对象的属性进行修改。就好比张三的对象只能是李四,不能变成王麻子,但是李四穿什么衣服、性格变化还是允许的
对于list这种数组类型的,改变指的是对象的地址发生改变,而对于val a = 5;这种普通的类型,指的是值的改变