在 Kotlin 语言中,val 与 var 在变量定义上的核心差异是什么?针对这两种关键字,分别说明它们各自最适用的实现场景。
考察说明
考查 Kotlin 基础语法中可变与不可变引用的区分及实际应用选择。
回答思路
- 【回答框架 1】val 声明只读引用,初始化后不能重新赋值;var 声明可变引用,可多次赋值。二者决定的是引用本身能否改变,而非指向对象是否可变。
- 【回答框架 2】使用场景上,优先用 val 提升代码安全性与不可变性,减少意外修改;仅当变量确实需要重新赋值时才用 var,例如循环计数器或有状态累积的局部变量。
- 【回答框架 3】对于对象内部状态的修改,val 仍允许改变对象属性,因此不可变性与 Java 的 final 语义类似,需结合数据类或集合的只读视图实现完整不可变。
- 【回答框架 4】函数参数默认不可变,若需可变可在内部复制或使用局部 var;类属性也尽量用 val 暴露,通过构造器注入或在 init 块中一次性初始化。
- 【回答框架 5】在集合与并发场景,val 搭配只读集合更利于线程安全理解,但只读不代表不可变,需明确底层实现差异。
- 【关键点 1】val 本质是只读引用,var 是可变引用,均不限制对象内部状态变化。
- 【关键点 2】优先采用 val 减少可变状态,var 只在需重新赋值时使用。
- 【关键点 3】val 的不可变性通过引用不可重赋值体现,对象内容仍可修改。
- 【易错点 1】误以为 val 使对象完全不可变,忽略了对象属性仍可修改的事实。
- 【易错点 2】在循环或需要更新状态的场景错误使用 val 导致编译错误,不意识到应换 var 或重构。
- 【易错点 3】混淆 val 引用不可变与集合只读视图的关系,只读视图不一定线程安全。