Kotlin可空和非可空类型

Kotlin可空和非可空类型

Kotlin null安全性是一种消除代码中空引用风险的过程。 如果Kotlin编译器发现任何null参数而仍然执行null引用相关语句,则会立即抛出NullPointerException

Kotlin的类型系统旨在消除代码中的NullPointerExceptionNullPointerException只能用于以下原因:

  • 强行调用抛出NullPointerException;
  • 未初始化此运算符,可在构造函数中传递并在某处使用。
  • 使用外部Java代码作为Kotlin,是Kotlin与Java互操作性。

Kotlin可空类型和非可空类型

Kotlin类型系统区分可以保持null(可空引用)和不能保持null(非null引用)的引用。 通常,String类型不可为null。 要创建保存null值的字符串,必须通过放置一个?来明确定义它们。 例如,在String后面使用:String?

可空类型

通过放置一个?来声明可空类型? 在String后面:

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

Kotlin可空类型的例子

fun main(args: Array<String>){  
    var str: String? = "Hello" // 变量被声明为可空
    str = null  
    print(str)  
}

执行上面示例代码,得到以下结果 -

null

非可空类型

非可空类型是普通字符串,它们声明为String类型:

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

null值赋给非可空字符串时会发生什么?

fun main(args: Array<String>){  
    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

在条件中检查null

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

fun main(args: Array<String>){
    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

目录

数组

字符串

注解

反射