kotlin学习——var与val

522 阅读1分钟

在Kotlin中,val和var是声明变量的两种方式,它们的核心区别在于可变性

1.val

val声明的变量只能在初始化时赋值一次,后续不能修改其引用。相当于Java中的final变量。

val name = "Kotlin"

name = "Java"  //报错!val不可重新赋值

然而,val定义的变量也并非完全不可变,例如:

val list = mutableListOf(1, 2, 3)  // list 是 val,不可重新赋值
list.add(4)                        // 允许!修改对象内部状态
println(list)                      // 输出 [1, 2, 3, 4]

 list = mutableListOf()          // 编译错误!val 不可重新赋值

再举个例子:

val readOnlyList = listOf(123)  // List 是只读的

readOnlyList.add(4)             // 错误!List 没有 add 方法

对比以上两个例子,val定义的“不变”,是对于定义的变量整体而言,而变量中的对象是否可变,取决于该变量的类型。

2.var

var定义的变量允许重新赋值。var变量可以重新赋值,但​​类型在初始化时确定后不可更改​​。

对于var与val,都支持类型推断,var第一次赋值后,后面重新赋值需要类型一致,不一致会报错,如:

var a = "string"
a = 1  //报错!

同样,kotlin支持对于复杂类型的推断,如:

val result = someFunction()  // 类型由函数返回值决定
val lambda = { x: Int -> x * 2 }  // 推断为 (Int) -> Int