MST

星途 面试题库

面试题:Kotlin中如何优雅地处理空指针安全问题

请阐述Kotlin在处理空指针安全方面的机制,例如可空类型、安全调用操作符(?.)、非空断言操作符(!!)以及Elvis操作符(?:)的使用场景,并通过具体代码示例展示如何利用这些机制避免空指针异常。
39.4万 热度难度
编程语言Kotlin

知识考点

AI 面试

面试题答案

一键面试
  1. 可空类型
    • 在Kotlin中,类型默认是非空的。如果一个变量可以为空,需要在类型后面加上?来表示可空类型。
    • 示例
var name: String? = null
  • 这里name变量被声明为String?类型,意味着它可以存储null值。如果声明为var name: String,则不能赋值为null,否则会编译错误。
  1. 安全调用操作符(?.)
    • 用于在调用可能为空的对象的方法或属性时,避免空指针异常。如果对象为空,整个表达式返回null
    • 示例
var str: String? = null
val length = str?.length
println(length) // 输出: null
  • 在上述代码中,str可能为空,通过str?.length,如果str为空,length就为null,不会抛出空指针异常。
  1. 非空断言操作符(!!)
    • 用于明确告诉编译器,开发者确定一个可空类型的变量不会为空。如果变量实际上为空,会抛出NullPointerException
    • 示例
var str: String? = null
val length = str!!.length // 这里会抛出NullPointerException
  • 这里使用!!,如果str为空就会抛出异常,通常用于在经过某些逻辑判断后,确定变量不会为空的情况。但使用时需谨慎,因为一旦判断失误就会引发空指针异常。
  1. Elvis操作符(?:)
    • 用于提供一个默认值,当可空对象为空时使用该默认值。
    • 示例
var str: String? = null
val result = str?: "default value"
println(result) // 输出: default value
  • 这里如果str为空,result就会被赋值为"default value"。如果str不为空,result就会被赋值为str的值。