kotlin中学习笔记——null

简介: 指定一个变量可null是通过在它的类型后面加?号,如val a: String? = null复制代码(注意这个Int也可为空是因为在kotlin中一切都是对象,包括在java中的基本类型)一个可null类型,没有进行检查前不能使用,如下代码会编译出错val a: String? = nulla.subString(2)

指定一个变量可null是通过在它的类型后面加?号,如


val a: String? = null
复制代码


(注意这个Int也可为空是因为在kotlin中一切都是对象,包括在java中的基本类型)

一个可null类型,没有进行检查前不能使用,如下代码会编译出错


val a: String? = null
a.subString(2)
复制代码

 

kotlin另外一个特性是当我们检查了一个可null类型,这个对象会自动转型成不可null类型,这就是Kotlin编译器的智能转换,如


val a: String? = null
if(a != null){
     a.subString(2)
}
复制代码


在if语句中,a从Int?变成了Int,所以可以直接使用。但是在if代码外,则需要重新检查。

当然这仅仅在变量当前不能被改变的前提下,如果变量可能被另外线程改变就会变得复杂。

如果我们处处去做判断,代码会臃肿起来,kotlin中有更简洁的处理方式,如:


val a: String? = null
a?.subString()
复制代码


我们使用安全访问符"?",只有当不为null的时候才执行这行代码。否则不会做任何事情。

但是注意如果有赋值行为的话,a为null的话会返回null,如:


val a: String? = null
val s = a?.subString()
复制代码


s会被赋值为null

kotlin中还有一种_Elvis operator_(?:)操作符,使用如下:


val a: String? = null
val s = a?.subString(2) ?: ""
val s = a?.subString(2) ?: return false
val s = a?.subString(2) ?: throw IllegalStateException()
复制代码


在kotlin中return和throw都是表达式,所以可以用在_Elvis operator_操作符右边

当我们确定一个非null变量不为null,我们可以使用"!!"来强制跳过检查正常编译,如:


val a: String? = null
a!!.subString(2)
复制代码


当然不推荐经常使用,因为是未经检验的存在null指针崩溃的可能。

在android新版本中,我们可以用@Nullable和@NotNull注解来辨别参数是否可以为空或者函数返回是否可以为空。


目录
相关文章
|
设计模式 Java Kotlin
Kotlin 学习笔记(三)—— Kotlin 的动态代理你会写吗?(下)
Kotlin 学习笔记(三)—— Kotlin 的动态代理你会写吗?(下)
125 1
|
2月前
|
Java 开发者 Kotlin
Kotlin学习笔记- 类与构造器
本篇笔记详细介绍了Kotlin中的类与构造器,包括类的基本概念、主构造器与次构造器的区别、构造器中参数的使用规则、类的继承以及构造器在继承中的应用等。通过具体示例,解释了如何在类中定义属性、实现构造逻辑,并探讨了Kotlin类的继承机制和Any类的作用。此外,还简要介绍了包的概念及其在组织代码中的作用。适合初学者深入理解Kotlin面向对象编程的核心概念。
34 3
|
2月前
|
Java 编译器 Kotlin
Kotlin学习笔记 - 数据类型
《Kotlin学习笔记 - 数据类型》是Kotlin编程语言学习系列的一部分,专注于Kotlin中的数据类型,包括布尔型、数字型(整型和浮点型)、字符型及字符串型,详述了各类型的定义、使用方法及相互间的转换规则。适合初学者快速掌握Kotlin基础语法。
28 3
|
2月前
|
安全 IDE Java
Kotlin 学习笔记- 空类型和智能类型转换
Kotlin 学习笔记聚焦于空类型和智能类型转换,深入解析非空与可空类型、安全调用操作符、Elvis 运算符、非空断言运算符及智能类型转换等内容,助你高效掌握 Kotlin 语言特性,避免 NullPointException 异常,提升代码质量。
31 2
|
2月前
|
Java 编译器 Kotlin
Kotlin学习笔记 - 数据类型
Kotlin学习笔记 - 数据类型
46 4
|
2月前
|
Java 开发者 Kotlin
Kotlin学习笔记- 类与构造器
Kotlin学习笔记- 类与构造器
31 3
|
2月前
|
设计模式 Java Kotlin
Kotlin学习笔记 - 改良设计模式 - 迭代器模式
Kotlin学习笔记 - 改良设计模式 - 迭代器模式
29 2
|
2月前
|
安全 IDE Java
Kotlin 学习笔记- 空类型和智能类型转换
Kotlin 学习笔记- 空类型和智能类型转换
49 2
|
2月前
|
设计模式 JavaScript Scala
Kotlin学习笔记 - 改良设计模式 - 责任链模式
Kotlin学习笔记 - 改良设计模式 - 责任链模式
45 0
|
2月前
|
设计模式 Java Kotlin
Kotlin 学习笔记- 改良设计模式 - 装饰者模式
Kotlin 学习笔记- 改良设计模式 - 装饰者模式
27 0