# 1. ? 空值处理
在`Kotlin`中赋予了比较方便的空值处理,即`?`。可以在数据声明的时候定义一个可空的变量,比如:
~~~
fun main() {
var a: Int // 非空变量
var b: String? // 可空变量
a = null // Null can not be a value of a non-null type Int
b = null
}
~~~
不能将`a`赋值为`null`,否则编译无法通过。
# 2. ?. 安全调用符
`Kotlin`提供了一个安全调用符“`?.`”,专门用于调用可空类型变量中的成员方法或属性,其语法格式为“`变量?.成员`”。其作用是判断变量是否为`null`,如果不为`null`才调用变量的成员方法或者属性。比如下面的案例:
~~~
fun main() {
var b: String? = null // 可空变量
println(b?.substring(2)) // null
b = "abc"
println(b?.substring(2)) // c
}
~~~
## 3. ?: 空合并操作符
可以在判断“`变量?.成员`”的时候指定一个默认值,比如下面的案例:
~~~
fun main() {
var b: String? = null // 可空变量
println(b?.substring(2) ?: "abc") // abc
}
~~~
其实这种写法有些类似于`Java`中的三目运算符。
## 4. !!. 非空断言
语法结构为“`变量!!.成员`”,也就是类似`Java`中的`assert`进行断言,如果不满足条件就会返回一个异常。比如下面的案例:
~~~
fun main() {
var b: String? = null // 可空变量
println(b!!.substring(2)) // abc
}
~~~
结果:
```
Exception in thread "main" kotlin.KotlinNullPointerException
at com.kotlinLearn.KotlinDemoKt.main(KotlinDemo.kt:5)
at com.kotlinLearn.KotlinDemoKt.main(KotlinDemo.kt)
```
- Kotlin语言基础
- Kotlin的简介
- Kotlin的变量和常见数据类型
- Kotlin的区间
- Kotlin的位运算
- Kotlin的容器
- Kotlin类型检查
- Kotlin的空值处理
- Kotlin的函数
- Kotlin的类
- Kotlin的委托
- Kotlin的延迟加载
- Kotlin的异常
- Kotlin的Lambda表达式
- Kotlin的高阶函数
- Kotlin的标准库中的高阶函数
- Kotlin的泛型
- Kotlin的表达式
- Kotlin的解构
- Kotlin的运算符重载
- Kotlin语言中级
- Kotlin的扩展函数
- Kotlin的扩展属性
- Kotlin的infix关键字
- Kotlin的DSL
- Kotlin的一些注解(和Java互调用)
- Kotlin的lateinit和by lazy
- Kotlin的反射
- Kotlin的匿名接口
- 安卓中的Kotlin
- 数据库操作Room