kotlin空指针校验
类型的说明
变量声明方式 val a: String="tom"
通常会写成val a = "tom"
但还有另一种 val a: String?="tom"
表示非空类型
1
2
3
4
5
6
|
fun test1() {
val a1 = 2;
// val a2 = ss as String // 抛出转换失败的异常
val a2 = a1 as? String // 转换失败则返回null
println(a2)
}
|
使用的说明
针对String?
这种带问号的类型,
调用时为了避免空指针需要辅助符号
?.
表示为空则不调用 且返回null
!!.
表示非空断言
完整示例代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
package test
class TestNull {
fun test1() {
val a1 = 2;
// val a2 = ss as String // 抛出转换失败的异常
val a2 = a1 as? String // 转换失败则返回null
println(a2)
}
fun test2() {
// 类型上多个问号? 是可空变量
var b1: String = b11()
var b2: String? = b22()
var msg = "\n 段落A b1== $b1 b2== $b2"
// b1 = b2 // 编译不通过 由于b2声明带问号 所以二者类型不同
b1 = b2!! // 由于b2有可能为空, 加入断言可直接赋值
msg += "\n 段落B b1== $b1 b2== $b2"
println(msg)
if (true) {
b2 = null
}
println("b1长度== ${b1.length} ")
println("b2长度== ${b2?.length} ")
println("b2长度== ${b2!!.length} ")// 抛出空指针异常
}
fun b11(): String {//返回值不可为空
return "b-11"
}
fun b22(): String? {//返回值可为空
return "b-22"
}
}
fun main(args: Array<String>) {
println("main-开始")
val tn = TestNull()
tn.test1()
tn.test2()
println("main-结束")
}
|
文章作者
duansheli
上次更新
2019-12-25
(325c7b3)