空安全
在今天的学习中,学了一下kotlin的优势点–空安全,记得以前在java学习中,有时候忘了考虑如果这个东西为空,在Java中,如果我们尝试访问一个空引用的成员可能就会导致空指针异常,还要不断的写if else判断是不是为空,在kotlin的优势里面,这个空安全就很厉害了哈
在kotlin里面他把变量分成二类,很直观的解决了空指针问题,在定义变量的时候就搞定
1.永远都不可能为空的变量
2.可能为空的变量
定义可能为空的变量方法
格式: var/val 变量名 ?= 值 在这里?表示可能为空
fun main(args: Array<String>) {
var s:Int?=22
var ss:Int=11
s = null //这里是可以的
ss = null //这一行就报错了
}
判断可空类型的变量是否为空的方法
1.if else方法 //这个是最简单的方式
var s:Int?=22
s = null
if(s==null){
println("变量为空")
}else{
println("变量不为空")
}
2.使用符号?.判断
该符号的用法为:可空类型变量?.属性/方法。如果可空类型变量为null时,返回null
fun main(args: Array<String>) {
var str : String? = "笑笑"
str = null
println(str?.length)
}
结果是 null
3.、函数中使用可空类型的情况下
当一个函数/方法有返回值时,如果方法中的代码使用?.去返回一个值,那么方法的返回值的类型后面也要加上?符号
fun ss():Int?{
val str : String? = "笑笑"
return str?.length
}
其他的关于空安全的运算符
let操作符
let操作符的作用:当时用符号?.验证的时候忽略掉null
格式:变量?.let{ … }
去除数组中的空
val s: Array<Int?> = arrayOf(1,2,null,3,null,5,6,null)
for (index in s) {
index?.let { println("index => $it") }
结果:
index => 1
index => 2
index => 3
index => 5
index => 6
?:操作符
当我们定义了一个可空类型的变量时,如果该变量不为空,则使用,反之使用另外一个不为空的值
格式:变量 = 数值A?:数值B
如果这个数值A不为空 则 变量等于数值A
如果为空 则 变量等于数值B
val s : String? = null
var length = 0
length = s?.length ?: -1
println(length)
输出结果为-1