Kotlin学习快速入门(5)——空安全

介绍

kotlin中,对象可分为两种类型,可为空的对象和不可为空对象

默认为不可为空对象,代码检测如果发现不可为空对象赋予了null,则会标红报错。

可为空的对象,如果调用了方法,代码检测也会标红报错

var s: String = "hello" //不可为空
s = null//标红报错

var s: String? = "hello"
s=null //代码检测通过
println(s.length)//标红报错

调用可为空对象的属性或方法

这样的好处就是,如果我们有一个对象一定是不为空的,那么我们可以直接调用它的方法而不会出现空指针错误。

但如果我们需要调用一个可为空的对象的属性,怎么做呢?

上面我们知道,如果一个可为空的对象调用方法,代码检测会标红报错,所以,kotlin中就提供了几个方法供我们调用可为空对象的属性或方法

1. 使用判空条件 if(xx !=null)

var s: String? = "hello"
if(s!=null){
    println(s.length)
} 

2. 使用安全调用 ?.

使用?.,如果对象为空,则会得到null,但程序不会停止

支持链式调用,当某处对象为空,则返回null

var s: String? = "hello"
println(s?.length) //s为空,则返回null,否则返回s.length
println(s?.length+1) //这里代码检测会报错
println(s?.length?.plus(1)) //修改之后的,通过代码检测

3. Elvis操作符 ?:

val date = 表达式1 ?: 表达式2

如果表达式1为null,则返回表达式2返回的内容

val l: Int = if (b != null) b.length else -1

//相当于上面的代码
//如果b为空,则返回l=-1,b不为空,l=b.length
val l = b?.length ?: -1

4. !!

对象为空,编译通过(代码提示不报错),但运行时候抛出空指针异常

var s: String = null
pritnln(s!!.length) //运行时候回报错

原文地址:https://www.cnblogs.com/kexing/p/11293726.html

时间: 2024-10-29 09:33:30

Kotlin学习快速入门(5)——空安全的相关文章

Kotlin学习快速入门(2)——条件 数组 循环 方法

条件 if条件判断 常用的判断和Java一样,这里提一下不同的用法 1.if可以作为三元运算符 val max = if (a > b) a else b 2.使用in判断是否在某个区间 val x = 1 //相当于条件 1<= x <=8 if(x in 1..8){ println("在区间内") } //与上面的条件相反 if(x !in 1..8){ ... } 3.is关键字类型转换 相当于Java中instanceof关键字 使用了is,kotlin已经

Kotlin的快速入门

Kotlin 快速入门: Kotlin 的 Hello World : #hellokotlin.kt fun main(args:Array<String>){ println("hello kotlin!"); } Kotlin 的 变量和常量 : 1 // eclipse 中运行的快捷键是 ctrl + f11 2 fun main(args:Array<String>){ 3 var i = 18; //变量 4 println(i); 5 6 val

Kotlin快速入门(一)基础

Kotlin快速入门(一)基础 Kotlin学习笔记,主要记录与Java不同的地方. 1 基本类型 1.1 数字 1)数字没有隐式扩宽转换 val b: Byte = 1 // OK, 字面值是静态检测的 val i: Int = b // 错误 但我们可以显示转换 val i: Int = b.toInt() 上下文推断转换类型是可以的 val l = 1L + 3 // Long + Int => Long 2)Kotlin中字符不是数字,但字符可以显示转换为数字 fun check(c:

程序员带你学习安卓开发,十天快速入门-基础知识(四)

关注今日头条-做全栈攻城狮,学代码也要读书,爱全栈,更爱生活.提供程序员技术及生活指导干货. 如果你真想学习,请评论学过的每篇文章,记录学习的痕迹. 请把所有教程文章中所提及的代码,最少敲写三遍,达到熟悉的效果. 本系列课程是.Net程序员学习安卓开发系列课程. 下面是前三次课程列表: 程序员带你学习安卓开发,十天快速入门-安卓学习必要性 程序员带你学习安卓开发,十天快速入门-开发工具配置学习 程序员带你学习安卓开发,十天快速入-对比C#学习java语法 为了大家系统有效的快速入门安卓开发,推荐

MyBatis学习总结(一)——MyBatis快速入门(转载)

孤傲苍狼 只为成功找方法,不为失败找借口! MyBatis学习总结(一)--MyBatis快速入门 一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录. 二.mybatis快速入门 2.1.准备

Gradle学习系列之一——Gradle快速入门(转)

这是一个关于Gradle的学习系列,其中包含以下文章: Gradle快速入门 创建Task的多种方法 读懂Gradle语法 增量式构建 自定义Property 使用java Plugin 依赖管理 构建多个Project 自定义Task类型 自定义Plugin 请通过以下方式下载本系列文章的Github示例代码: git clone https://github.com/davenkin/gradle-learning.git 和Maven一样,Gradle只是提供了构建项目的一个框架,真正起作

MyBatis学习总结——MyBatis快速入门

MyBatis学习总结(一)--MyBatis快速入门 一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录. 二.Mybatis入门 1. 用到的相关包      {Mybatis} mybat

如何快速入门Python学习呢?

根据TIOBE最新排名 ,Python已超越C#,与Java,C,C++一起成为全球前4大最流行语言,成为互联网时代最受欢迎的编程语言,越来越多的人选择Python,那么如何快速入门Python学习呢?首先你要了解Python,我们从以下几个方面来说. 学完python前景会咋样 其实我个人是很看好python未来的就业前景的,因为我认识太多的工程师都已经在学python,很多都是月收入大几万的 一项专业调查显示,75%的受访者将Python视为他们的主要开发语言,反之,其他25%受访者则将其视

Python学习基础篇第一篇——快速入门(适合初学者)

一.Python学习基础篇第一篇--(快速入门) 建议从Python2.7开始学习,Python2.7可以支持扩展大量的第三方类库,是目前比较成熟的版本 编写代码的软件推荐将python自带的IDLE和PyCharm集成IDE结合起来使用 1.1 Python命令行 Python命令行将以 >>> 开始,比如 >>>print 'Hello World!' 对于验证简单的命令可以在python自带的IDLE中完成  1.2 在Python自带的IDLE写一段小程序 在所