Kotlin 极简小抄 P8(不可空类型、可空类型、注意事项、非空断言 !!)
Kotlin 概述
-
Kotlin 由 JetBrains 开发,是一种在 JVM(Java 虚拟机)上运行的静态类型编程语言
-
Kotlin 旨在提高开发者的编码效率和安全性,同时保持与 Java 的高度互操作性
-
Kotlin 是 Android 应用开发的首选语言,也可以与 Java 一样用于服务器端开发
一、不可空类型
- 默认情况下,Kotlin 中的类型是不可空的,当声明一个变量时,必须给它一个非空的值
var name: String = "Tom"
- 当声明一个变量时,给它一个 null,会报错
var name: String = null
# 输出结果Kotlin: Null can not be a value of a non-null type String
二、可空类型
- 要在 Kotlin 中表示一个可以为空的类型,需要在类型后面加上一个问号
?
,这时,可以给它一个 null
var name: String? = null
- 也给它一个非空的值
var name: String? = "Tom"
三、注意事项
1、对于不可空类型
- 对于一个不可空类型的变量,可以直接调用它的方法
var name: String = "Tom"val length1: Int = name.lengthprintln(length1)
# 输出结果3
- 如果使用
?.
操作符,返回值为可空类型,接收则需要一个可空类型的变量,否则会报错
var name: String = "Tom"val length2: Int? = name?.lengthprintln(length2)
# 输出结果3
var name: String = "Tom"val length2: Int = name?.lengthprintln(length2)
# 输出结果Kotlin: Type mismatch: inferred type is Int? but Int was expected
2、对于不可空类型
- 对于一个可空类型的变量,不能直接调用它的方法,需要使用
?.
操作符,返回值为可空类型,接收则需要一个可空类型的变量,否则会报错
var name: String? = nullval length1: Int? = name?.lengthprintln(length1)
# 输出结果null
var name: String? = nullval length2: Int = name.lengthprintln(length2)
# 输出结果Kotlin: Only safe (?.) or non-null asserted (!!.) calls are allowed on a nullable receiver of type String?
四、非空断言 !!
- 对于一个可空类型的变量,使用
!!
操作符,可以将它转换为不可空类型,但是如果它的值为 null,会报错
var str: String? = "Hello World!"val length = str!!.length;println(length)
# 输出结果12
var str: String? = null;val length = str!!.length;println(length)
# 输出结果Exception in thread "main" java.lang.NullPointerException
- 对方法的返回值使用
!!
操作符,可以将它转换为不可空类型,但是如果它的值为 null,会报错
fun getStr1(): String? {return "Hello World"
}
var str1 = getStr1()!!println(str1)
# 输出结果Hello World
fun getStr2(): String? {return null
}
var str2 = getStr2()!!println(str2)
# 输出结果Exception in thread "main" java.lang.NullPointerException