系列文章全部为本人的学习笔记,若有任何不妥之处,随时欢迎拍砖指正。如果你觉得我的文章对你有用,欢迎关注我,我们一起学习进步!kotlin学习笔记系列首发简书和CSDN
Kotlin学习笔记(1)- 环境配置
Kotlin学习笔记(2)- 空安全
Kotlin学习笔记(3)- 语法
Kotlin学习笔记(4)- 流程控制
Kotlin学习笔记(5)- 类
Kotlin学习笔记(6)- 属性
Kotlin学习笔记(7)- 接口
Kotlin学习笔记(8)- 扩展
Kotlin学习笔记(8)- 扩展(续)
Kotlin学习笔记(9)- 数据类
Kotlin学习笔记(10)- 泛型
Kotlin学习笔记(11)- 内部类和嵌套类
Kotlin学习笔记(12)- 委托

kotlin中很大的一个特点就是null安全,在java中需要到处处理的空判断带来的代码层次深,以及没处理好空判断带来的空指针异常NullPointerExecption,在这里能得到很好的解决。kotlin通过?将是否允许为空分割开来,比如str:String为不能空,加上?后的str:String?为允许空,通过这种方式,将本是不能确定的变量人为的加入了限制条件。而不符合条件的输入,则会在IDE上显示编译错误而无法执行。

var value1 : String = "abc"
value1 = null        // 编译不错误var value2 : String? = "abc"
value2 = null       // 编译能通过

在对变量进行操作时,如果变量是可能为空的,那么将不能直接调用,因为编译器不知道你的变量是否为空,所以编译器就要求你一定要对变量进行判断

var str : String? = null
str.length    // 编译不错误
str?.length   // 编译能通过

那么问题来了,我们知道在java中String.length返回的是int,上面的str?.length既然编译通过了,那么它返回了什么?我们可以这么写:

var result = str?.length

这么写编译器是能通过的,那么result的类型是什么呢?在kotlin中,编译器会自动根据结果判断变量的类型,翻译成普通代码如下:

if(str == null)result = null;          // 这里result为一个引用类型
elseresult = str.length;    // 这里result为Int

那么如果我们需要的就是一个Int的结果(事实上大部分情况都是如此),那又该怎么办呢?在kotlin中除了?表示可为空以外,还有一个新的符号:双感叹号!!,表示一定不能为空。所以上面的例子,如果要对result进行操作,可以这么写:

var str : String? = null
var result : Int = str!!.length

这样的话,就能保证result的数据类型,但是这样还有一个问题,那就是str的定义是可为空的,上面的代码中,str就是空,这时候下面的操作虽然不会报编译异常,但是运行时就会见到我们熟悉的空指针异常NullPointerExectpion,这显然不是我们希望见到的,也不是kotlin愿意见到的。java中的三元操作符大家应该都很熟悉了,kotlin中也有类似的,它很好的解决了刚刚说到的问题。在kotlin中,三元操作符是?:,写起来也比java要方便一些。

var str : String? = null
var result = str?.length ?: -1
//等价于
var result : Int = if(str != null) str.length else -1 

小结:

  1. kotlin的null安全主要通过?!!人为的将变量做了限制
  2. 对可空的变量的操作,也要做空判断str?.length
  3. 可以直接定义变量var result,kotlin会根据后面的赋值动态的判断result的类型
  4. 合理的利用三元操作符?:,对result的数据类型进行控制,并避免空指针异常的问题

写在最后:

今天陪媳妇出去逛,献出了自己的第一次——被马蜂蜇。夏天到了,朋友们出去玩,尤其是公园之类绿植茂盛的地方,一定要做好防蚊虫工作,虽然城市里不会出现太有毒性的蚊虫,但是谁也不喜欢被打扰到出去游玩的心情吧~

谨以最后几句纪念一下我此刻肿起的胳膊,晚安,Kotlin!

Kotlin学习笔记(2)- 空安全相关推荐

  1. Kotlin学习笔记(3)- 语法

    系列文章全部为本人的学习笔记,若有任何不妥之处,随时欢迎拍砖指正.如果你觉得我的文章对你有用,欢迎关注我,我们一起学习进步!kotlin学习笔记系列首发简书和CSDN Kotlin学习笔记(1)- 环 ...

  2. Kotlin学习笔记(1)- 环境配置

    系列文章全部为本人的学习笔记,若有任何不妥之处,随时欢迎拍砖指正.如果你觉得我的文章对你有用,欢迎关注我,我们一起学习进步!kotlin学习笔记系列首发简书和CSDN Kotlin学习笔记(1)- 环 ...

  3. Kotlin 学习笔记(七)—— Kotlin类与对象之属性与字段

    Kotlin 学习笔记(七)-- Kotlin类与对象之属性与字段 Kotlin学习笔记系列教程 Kotlin 学习笔记(一)-- 概述.学习曲线.开发工具.参考资料 Kotlin 学习笔记(二)-- ...

  4. Kotlin学习笔记20 阶段复习2

    参考链接 示例来自bilibili Kotlin语言深入解析 张龙老师的视频 lambda表达式 内联函数 Kotlin学习笔记 第三章 函数 高阶函数 lambda表达式 内联函数_积跬步 至千里- ...

  5. Kotlin学习笔记19 阶段复习1

    参考链接 示例来自bilibili Kotlin语言深入解析 张龙老师的视频 基础部分 Kotlin学习笔记 第一章开始 第二章 基础_积跬步 至千里-CSDN博客 类与继承 Kotlin学习笔记 第 ...

  6. Kotlin学习笔记(1)-- 基础语法

    文章目录 Kotlin学习笔记(1)-- 基础语法 输出 语法 代码 输出 可读可改(var) 语法 代码 输出 内置数据类型 只读变量(val) 类型推断 编译时常量 语法 代码 输出 引用类型 r ...

  7. Kotlin 学习笔记(四)—— 协程的基础知识,面试官的最爱了~

    又是一个月没见了,坚持永远是世上最难的事情,但,往往难事才会有更大的收获.与君共勉~ 前段时间一直在学习 Compose,所以导致 Kotlin 笔记系列搁置了好久.一方面是因为 Compose 的学 ...

  8. Kotlin学习笔记--Kotlin之集合

    Kotlin学习笔记--Kotlin之集合 集合类 1. List 集合 1.1 不可变list 1.2 可变list MutableList 1.3 集合遍历 1.4 List的操作函数 1.5 l ...

  9. Kotlin 学习笔记(八)—— Kotlin类与对象之接口

    Kotlin 学习笔记(八)-- Kotlin类与对象之接口 Kotlin学习笔记系列教程 Kotlin 学习笔记(一)-- 概述.学习曲线.开发工具.参考资料 Kotlin 学习笔记(二)-- 基础 ...

最新文章

  1. Linux安装Nginx、Redis、django
  2. 你确实应该学习并使用的 10 个 C# 特性
  3. 小程序 常用快捷键
  4. IE6-7-8 JS关闭窗口不提示的方法
  5. 抢人饭碗了!推荐一款全自动的机器学习建模神器PyCaret
  6. 使用单元测试测试简单的首页
  7. ruby 集合 分组_将Ruby中两个集合的所有元素结合在一起
  8. java自学之路-day19
  9. selenium自动化之元素高亮显示
  10. 贝叶斯公式的共轭分布
  11. Java入门到超神(全网整理的复习资料)
  12. 杰控组态自定义串口通讯的经验
  13. 上百套HTML5登录页面模板
  14. go语言 liteIDE 错误: 进程无法启动.
  15. 浙大 PAT 甲级 1017 Queueing at Bank C++
  16. Java经典全套面试汇总(二十万字)
  17. 多媒体开发之视频格式---1080p逐行和1080i隔行
  18. 用Matlab实现人脸 68 landmarks详细教程
  19. 【滴滴出行】2017秋招笔试真题(智力题)
  20. Excel图形转入CorelDRAW技巧

热门文章

  1. python dictwriter_手把手教你写爬虫 |Python 采集大众点评数据采集实战
  2. loop指令 c语言,arm汇编loop指令
  3. Codeforces 959 E. Mahmoud and Ehab and the xor-MST 思路:找规律题,时间复杂度O(log(n))
  4. 交换机短路_融商通达变频器功率模块短路维修故障案例
  5. spark里的hbase的ImmutableBytesWritable的打印问题scala
  6. keepalived(8)——http、tcp检测
  7. 二叉树的层序遍历—leetcode102
  8. kmd缅甸计算机学校,缅甸福星孔子课堂博睿国际学校分课堂举行2017年春节联欢会...
  9. fatal error C1070: mismatched wabtags.h
  10. GetLastInputInfo 判断离开状态