📜  Kotlin可空不可空安全

📅  最后修改于: 2021-01-05 07:35:59             🧑  作者: Mango

Kotlin Null安全

Kotlin空安全性是一种消除代码中空引用风险的程序。如果Kotlin编译器发现在不执行任何其他语句的情况下传递了任何null参数,则会立即引发NullPointerException。

Kotlin的类型系统旨在消除代码中的NullPointerException。 NullPointerException仅可能由于以下原因:

  • 强制调用以引发NullPointerException();
  • 此运算符的未初始化形式,可在某个地方传递和使用的构造函数中使用。
  • 将外部Java代码用作Kotlin是Java的互操作性。

Kotlin可空类型和不可空类型

Kotlin类型系统区分可以包含null(可为空的引用)和不能包含null(非空引用)的引用。通常,String的类型不能为空。为了使字符串包含空值,我们必须通过放置?来明确定义它们。后面的字符串为:字符串?

可空类型

可空类型通过放置?来声明。在字符串后面为:

var str1: String? = "hello"
str1 = null // ok

可空类型的Kotlin示例

fun main(args: Array){
var str: String? = "Hello" // variable is declared as nullable
str = null
    print(str)
}

输出:

null

非空类型

不可为空的类型是普通字符串,它们声明为以下字符串类型:

val str: String = null // compile error
str = "hello" // compile error Val cannot be reassign
var str2: String = "hello"
str2 = null // compile error

当我们将null值分配给不可为null的字符串时会发生什么?

fun main(args: Array){
var str: String = "Hello"
str = null // compile error
    print(str)
}

输出:

它将生成一个编译时错误。

Error:(3, 11) Kotlin: Null can not be a value of a non-null type String

检查条件是否为空

Kotlin的If表达式用于检查条件并返回值。

fun main(args: Array){
var str: String? = "Hello"     // variable is declared as nullable
var len = if(str!=null) str.length else -1
println("str is : $str")
println("str length is : $len")

str = null
println("str is : $str")
len = if(str!=null) str.length else -1
println("b length is : $len")
}

输出:

str is : Hello
str length is : 5
str is : null
b length is : -1