Kotlin中的val 和var 两个关键字都是用来声明变量的。
这两个关键字的唯一区别是,var 关键字的值可以重新分配,而val 则不能。
为了说明这个区别,请看下面的例子:
var myNum = 15
myNum = 20
在上面的例子中,变量myNum 的初始值是15 ,然后被改为20 。
当你使用val 关键字来声明该变量时,重新赋值将触发一个错误:
val myNum = 15
myNum = 20 // Error: Val cannot be reassigned
但是,尽管你不能改变val 变量的值,但如果变量类型是一个对象,变量的属性仍然可以被改变。
例如,假设你有一个Member 类,有一个name 属性,如下所示:
class Member(var name: String)
val user = Member("Nathan")
user.name = "Jack"
即使user 对象是用val 关键字声明的,user 对象的name 属性仍然可以被改变。
但这是因为name 属性是用var 关键字定义的。如果你使用val 关键字来定义该属性,那么改变该属性将引发同样的错误:
class Member(val name: String)
val user = Member("Nathan")
user.name = "Jack" // Error: Val cannot be reassigned
总结一下,任何使用val 声明的变量都是不可变的(不能重新分配),而var 变量是可变的(可以重新分配)。
当你的变量是一个对象时,用于声明任何属性的关键词将决定该属性是否可以被重新分配。