kotlin基础4: 空安全

Java中常常会因为空值导致空指针异常,因为java允许在变量初始化时,没有赋值的话默认是空值

而kotlin恰好相反,除非做特定声明,否则不能为空,并且在编译时期就会做出提醒

并非所有变量都需要做特殊处理,只有那些可能为空的字段,比如后台服务器返回的字段,为了避免空指针异常,才需要处理。

又或者直接将变量设置为null,也需要做一些处理。

先看一下不用处理的情况:

var string:String = "hello"  //正常声明

fun main(args: Array<String>) {
    string = "Hello Kotlin"
    println("string的值:$string  string的长度 ${string.length}")  //正常使用
}

 运行结果:

 下面看一下会编译出错的情况:

 

 空处理方式一:使用 安全调用操作符?

var string:String? = ""   //在数据类型后面加?

fun main(args: Array<String>) {
    string = null
    println("string 的长度:${string?.length}")     //使用该变量的时候也要加?
}

运行结果:

可以看到如果数据为空,那空的数据就会打印为null

空处理方式二:?配合使用非空断言操作符 !!.  (用于需要抛异常的场景)

var string:String? = ""

fun main(args: Array<String>) {
    string = null
    println("string 的长度:${string!!.length}")
}

运行结果:

 空处理方式三:?配合使用let.  (用于需要处理多种情况的数据)

var string:String? = ""

fun main(args: Array<String>) {
    string = "hello kotlin"
    string.let {
        if(string?.length!! > 10){  //要加一个!!的非空断言
            string = "hello kotlin hello kotlin"
        }else{
            string = "hello"
        }
    }
    println("string :$string")
}

运行结果:

空处理方式四:?配合使用?:(空合并操作符).

var string:String? = ""

fun main(args: Array<String>) {
    string = "hello kotlin"
    println("string 的长度:${(string?:"hello").length}")
    string = null
    println("string 的长度:${(string?:"hello").length}")
}

?:的意思就是如果为空,取?:右边的值,不为空就是变量的值,有点像缩略版的java三目运算符

运行结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值