Kotlin-空值和空类型

变量除了能引用一个具体的值之外,还有一种特殊的值,那就是 null, 它代表空值, 也就是不引用任何对象

在Kotlin中, 对空值的处理是非常严格的,正常情况下,我们的变量是不能直接赋值为 null 的,否则无法编译通过, 这直接在编译阶段就避免了空指针问题

在这里插入图片描述
Kotlin中所有的类型默认都是非空类型。如果我们希望某个变量在初始情况下使用 null 而不去引用某一个具体对象, 此时就需要将变量的类型修改为可空类型,只需要在类型名称的后面添加一个?即可:

fun main() {
    var str: String? = null
}

既然现在是可空类型,那么当一个变量为null时,这时候使用类的一些成员方法或是获取成员属性时, 会出现一些问题:

在这里插入图片描述
此时为了安全,就需要对变量进行判断

fun main() {
    var str: String? = null
    if (str != null) {
        println(str.length)
    }
}

不过有些情况下,我们已经非常清楚一定不为null。即便它是一个可空类型的变量,也要调用成员方法或是获取成员属性

fun main() {
    var str: String? = null
    // 使用非空断言操作符 !!. 来明确不会出现 null 问题
    println(str!!.length)
}

在这里插入图片描述

虽然使用非空断言操作符能够进行强制操作,但是这样实际上并不安全

Kotlin为我们提供了一种更为安全的空类型操作,更安全地访问可能包含null值的对象,也就是安全调用运算符?.

fun main() {
    var str: String? = null
    println(str?.length)
}

在这里插入图片描述

fun main() {
    var str: String? = "abc"
    println(str?.length)
}

在这里插入图片描述
有时候我们希望如果变量为null,在使用安全调用运算符时,返回一个我们自定义的结果,而不是null。这时候我们可以使用 Elvis运算符?:

  • 左侧为null,返回右侧自定义的值
  • 左侧不为null,返回左边
fun main() {
    val str: String? = null
    val len = str?.length ?: 0
    println(len)
}

在这里插入图片描述

fun main() {
    val str: String? = "abc"
    val len = str?.length ?: 0
    println(len)
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值