kotlin学习笔记——变量、可空与非空


有效减少空指针错误是kotlin的一大有点,那么它是如何做到的呢?

kotlin中避免变量空指针错误的解决方案:

  1. 可空变量类型声明 ( ? )
  2. 可空类型与安全调用操作符 ( ?. )
  3. Elvis操作符 ( ?: )

可空类型 (?)

变量定义

var是可变变量,val是不可变变量,相当于java中final修饰

val name: String = "Mike"	//一旦赋值,不可更改
var age: Int = 24
var height: Float

age += 1
height = 178.5F

定义变量尾部不加问号,则编译器要求该值不能为空

var name: String

name = "Mike"
//name = null	//不能为空,否则编译报错

想要允许变量为空,则在类型后面加问号

class Person(
    val first: String,
    val middle: String?,    //可为空
    val last: String
)

val p = Person("North", null, "West")

检测变量是否为空

val声明,if语句内,将p.middle智能转换为非空类型

val p = Person("North", null, "West")
if (p.middle != null) {
    //上面是val不可更改,所以p.middle这里不会变为空,
    val middleNameLength = p.middle.length  //智能转换为非空类型
}

但若是var声明,则不同,需要用 非空断言(!!.) 或者 Elvis安全调用操作符(?😃
非空断言在变量为空时会出现NullPointerException空指针错误,所以一般不建议这么做
推荐用Elvis操作符,指定为空时返回的值

var p= Person("North", null, "West")
if (p.middle != null) {
 	//上面是var,可能在判断之后变为空,
    val middleNameLength = p.middle!!.length    //方法一:用“非空断言”   !!.
    val middleNameLength2 = p.middle?.length ?: 0   //方法二:Elvis安全调用操作符  ?:
    val middleNameLength3 = p.middle?.length ?: return
}

强制转换 (as)和安全转换(as?)

var p:Person?
p = Person("North", null, "West")

//as 强制转换
val p0 = p as Person

p = null
//as?安全转换,当p是null时,p1也是null
val p1 = p as? Person
println(p1)     //null
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值