在我们开始学kotlin的时候,定义变量的时候,var是可变变量,val是只读变量,类似于java中final,但是在实际操作中,val的量真的是不可以改变的吗?
对于基本变量而言,可读和不可变确实没什么区别,因为你无法去重写一个val变量,在这个时候的确是不可变的
但是当变量是成员变量的时候,只读和不可变就是两种不同的类型了
var和val最大的区别就是是否设置了get和set,我们都知道var同时又get和set,但是在val中只有get,
但是做为成员变量,当我们修改这个值并且修改这个值,重新返回的时候,那么即使你使用val去定义变量,那么也是可以改变的,看下面代码👇
class Test(val birthDay: DateTime) {
val age: Int
get() = yearsBetween(birthDay, DateTime.now())
}
我们直接对get方法进行赋值,经过运行发现,值确实会改变,但是kotlin官方不建议我们这样操作,更建议我们提供方法将值抛出
这更加说明了即使用了val定义变量,其实也是可以改变的