1、定义可空类型

<code class="language-plain has-numbering hljs" id="code_id_0">fun main(){
    // 定义可空类型
    var x:String? = "hello"
    x = null
}</code>
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

2、!! 强转类型

定义可空类型之后,如果使用其内置方法,编译不会通过,因为值有可能为null,可以使用 !! 把类型强转为不可空:

<code class="language-plain has-numbering hljs" id="code_id_1">fun main(){
    // 定义可空类型
    var x:String? = "hello"
    // 此时x值确定为不可空类型,所以可以调用length方法
    val y =  x!!.length // y 类型为 int 类型
    println("${y.javaClass.simpleName}") // int
}</code>
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
注意事项:上边!! 运算符不是安全的,因为如果该值是否为空,会报空指针异常。

3、?.   安全访问运算符

定义及使用

<code class="language-plain has-numbering hljs" id="code_id_2">fun main(){
    // 定义可空类型
    var x:String? = "hello"
    // 获取字符串长度:如果x不为空,则返回其长度,否则返回0
    var y = x?.length?:0
    println(y) // 5
    x = null
    y = x?.length?:0
    println(y) // 0
}</code>
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.

注意事项:

(1) ?.  为安全访问,判断逻辑是:x?.length 

(2)上边 ?: 运算符 是安全的,判断逻辑是: 如果 ?: 前边值为空,则使用后边定义的值。