在 Kotlin 语言里,可空类型和非空类型之间存在怎样的差异?
考察说明
考查对 Kotlin 空安全机制中可空与非空类型核心区别的理解。
回答思路
- 【回答框架 1】非空类型在默认情况下不允许存储 null,而可空类型通过在类型后加问号声明,允许值为 null。
- 【回答框架 2】编译器会在编译期对可空类型的操作进行严格检查,直接调用其成员或赋值给非空类型会报错,必须显式处理空值,如使用安全调用、Elvis 操作符或非空断言。
- 【回答框架 3】可空类型在底层通常通过平台类型或装箱实现,与 Java 互操作时可能产生平台类型,需留意空值处理。
- 【关键点 1】可空类型用问号声明,非空类型默认不可为 null。
- 【关键点 2】可空类型操作受编译期空安全检查约束。
- 【关键点 3】处理可空值常用安全调用符、Elvis 运算符或非空断言。
- 【易错点 1】非空断言虽能绕过检查但可能抛出空指针异常,应谨慎使用。
- 【易错点 2】平台类型在跨语言互操作时可能隐藏空值风险。