定义
首先这两个是声明变量的关键字
val(value)—— 不可变引用。使用 val 声明的变量不能在初始化之后再次赋值。它对应的是 Java 的 final 变量
用于属性
1 | val age = 10 |
注意:val 引用自身是不可变的,但是它指向的对象可能是可变的。如
1 | val languages = arraylistOf("Java") |
val 声明的变量会默认生成 getter 方法,var 声明的变量会默认生成 getter 和 setter 方法,当然也可以自定义,如
1 | val age |
这里头牵涉到一个支持字段 field
,如对属性做一些判断
1 | var age: Int = -1 |
用于参数
首先 val 和 var 只能用于主构造函数中的参数,其实相当于还是作用于属性上,如
1 | class Person(val name: String) |
这里涉及到一个主构造函数,那么什么是主构造函数呢,如上面的例子,用括号括起来的就是主构造函数,其中省略了一个关键字 constructor
,完整的写法是这样的
1 | class Person constructor(val name: String) |
有主构造函数自然就有从构造函数
1 | class Person { |
在从构造函数和普通函数中,不可以用 val 和 var 关键字来修饰参数变量,如下面的例子,编译器会报错
1 | fun play(var name: String) { |