Kotlin空安全性是一种从代码中消除空引用风险的程序。如果Kotlin编译器发现在不执行任何其他语句的情况下传递了任何null参数, 则会立即引发NullPointerException。
Kotlin的类型系统旨在消除代码中的NullPointerException。 NullPointerException仅可能由于以下原因:
- 强制调用以引发NullPointerException();
- 未初始化的此运算符, 可在某个地方传递和使用的构造函数中使用。
- 将外部Java代码用作Kotlin是Java的互操作性。
可空类型
可空类型通过放置?来声明。在字符串后面为:
var str1: String? = "hello"str1 = null // ok
可空类型的Kotlin示例
fun main(args: Array<
String>
){var str: String? = "Hello" // variable is declared as nullablestr = nullprint(str)}
输出:
null
非空类型
不可为null的类型是普通字符串, 它们声明为String类型, 如下所示:
val str: String = null // compile errorstr = "hello" // compile error Val cannot be reassignvar str2: String = "hello"str2 = null // compile error
当我们为不可为空的字符串分配空值时会发生什么?
fun main(args: Array<
String>
){var str: String = "Hello"str = null // compile errorprint(str)}
输出:
它将生成一个编译时错误。
Error:(3, 11) Kotlin: Null can not be a value of a non-null type String
检查条件是否为空
Kotlin的If表达式用于检查条件并返回值。
fun main(args: Array<
String>
){var str: String? = "Hello"// variable is declared as nullablevar len = if(str!=null) str.length else -1println("str is : $str")println("str length is : $len")str = nullprintln("str is : $str")len = if(str!=null) str.length else -1println("b length is : $len")}
输出:
str is : Hellostr length is : 5str is : nullb length is : -1
推荐阅读
- Kotlin运算符
- Kotlin嵌套try-catch块
- Kotlin嵌套类和内部类
- Kotlin MutableSet接口
- Kotlin MutableMap接口
- Kotlin MutableList(mutableListOf())
- Kotlin可变数组
- Kotlin多重捕获块
- Kotlin map接口