Kotlin的一些特殊运算符

区间

区间表示的是一个范围,类似于数学概念上的区间,是ClosedRange的子类,IntRange最常用

  • 基本的写法
    0..100表示 [0,100]
    0 until100 表示[0,100)
    可以使用in操作来判断是否某个元素是否存在,也可以使用IntRange对象的contains()方法来判断

  • 代码示例:

    val mRange: IntRange = 0..100
    val openRange: IntRange = 0 until 100
    println(50 in mRange)       //打印 true
    println(mRange.contains(500))       //打印false
    

空类型

在Java中,经常会遇到NullPointerException空指针异常的情况,出现这种情况就是在调用对象的时候没有进行判空操作,但是在Kotlin中,对象为null的情况有着严格的限制,如果对象可能为空,在编码阶段就需要对其进行强制性的判空操作

?操作符,常用来跟在对象后面,表示该对象可能为空,在后面的编码过程中,需要对该对象进行强制的判空操作
!!操作符,该操作符不推荐,表示你不关心该对象是否为空或者你可以很确定你调用的对象不可能为空,在调用这个操作符的时候,可能就会出现Java中的NullPointerException异常导致程序Crash掉
?:Elvis操作符,其实可以理解为简化的判空操作。代码示例如下:

val name: String = getName() ?: "Fizzer"    //代码释义:声明一个String类型的变量,通过getName方法来获值,如果getName方法返回的值为null的时候,这时候,给name变量赋值Fizzer
类似于Java片段
String name = getName();
if(name.isEmpty()){name = "Fizzer"
}

智能类型转换

在Kotlin中也有类似于Java的类型转换,使用的是as 关键字
代码示例:

val sub: SubClass = parent as SubClass

这是Kotlin的类型转换代码示例,表示Parent类的对象转换成SubClass类,但是这种转换会出现跟Java一样的类转换异常ClassCastException

  • 安全类型转换

    为了解决上述可能出现的类型转换异常的问题,Kotlin中引入的安全的类型转换机制,当出现类转换异常的时候,这时直接将sub对象赋值为null,而不是直接抛异常导致程序崩溃掉,而安全的类转换使用as?操作符
    代码示例:

    val sub: SubClass = parent as? SubClass
    

    如果类转换失败的话,返回null,不抛异常

  • 智能类型转换

    智能的类型转换是指,当程序通过前面的逻辑判断已经确定某个实例是某个对象,那么这个实例是不需要进行类型转换的
    Java代码解释:

    if(parent instanceof SubClass){((SubClass)parent).getName();
    }
    

    以上代码是Java的写法,当判断parent是SubClass的一个实例后,在去调用SubClass类的getName方法,而在调用之前,依然对parent进行了类型的强制转换

    Kotlin代码示例:

    if(parent is SubClass){parent.getName();
    }
    

    也就是说,在Kotlin中,前面已经通过if语句判断了parent就是Subclass的一个实例,那么我在后面的调用的时候,是不需要再进行类型转换的,这就是智能类型转换

    Kotlin中使用is来判断是否为某个对象的实例,类似于Java的instanceOf关键字

Kotlin的一些特殊运算符相关推荐

  1. 疯狂kotlin讲义连载之运算符和表达式——区间运算符

    3.3 区间运算符 Kotlin提供了两个区间运算符,它们都可以非常方便地构建一种数据结构,这种数据结构可包含特定区间内的所有值. 3.3.1闭区间运算符 闭区间运算符a .. b用于定义一个从a~b ...

  2. kotlin 运算符_Kotlin属性,数据类型,运算符

    kotlin 运算符 In this tutorial, we'll be digging deep into the basic fundamental blocks of Kotlin, name ...

  3. Kotlin应用开发初体验

    本文 摘自<Kotlin编程权威指南> 本章,你将学习使用IntelliJ IDEA开发首个Kotlin应用.借此,你将熟悉开发环境,创建Kotlin新项目,编写并运行Kotlin代码,以 ...

  4. Kotlin学习与实践 (十)Kotlin的可空性

    可空类型 * 类型就是数据的分类.决定了该类型可能的值,以及在该类型值上可以完成的操作. * 与Java不同,Kotlin对可空类型的显示的支持.可空类型是Kotlin类型系统中帮助避免NullPoi ...

  5. Kotlin 与 Java 比较

    阅读本文前,建议先了解kotlin,  当了解了kotlin 再来看它与java 之间的区别,印象会更加深刻. 打印日志 可以看出,kotlin 打印更简洁 JavaSystem.out.print( ...

  6. Kotlin入门(8)空值的判断与处理

    上一篇文章介绍了如何对循环语句进行操作,末尾还演示了发现空串时直接继续下一循环,只是在初始化字符串数组时使用了"val poem2Array:Array<String?> = * ...

  7. kotlin基础教程:<6>map集合

    之前我们学习了常用的集合和数组,它们创建的方式.如何获取元素以及遍历的方式,一般来说创建数据结构都可以使用kotlin的类型推导来简化代码: //可变的,注意后面的mutable首字母小写val li ...

  8. 第11章 运算符重载与约定

    第11章 运算符重载与约定 我们在<第2章 Kotlin 语法基础>中已经学习过关于运算符的相关内容,本章将继续深入探讨Kotlin中的运算符的重载与约定. 通常一门编程语言中都会内置预定 ...

  9. 读书笔记『Kotlin实战』

    P18:在Kotlin中没有声明数组类型的特殊语法,数组就是类 P19:在Kotlin中if是有结果的表达式 fun mac(a:Int,b:Int):Int{ return if(a>b) a ...

  10. 初识kotlin(初用kotlin一时爽、一直用一直爽)

    kotlin历程 2011年7月,JetBrains推出Kotlin项目,这是一个面向JVM的新语言 2012年2月,JetBrains以Apache 2许可证开源此项目 2016年2月15日,Kot ...

最新文章

  1. CodeVIO:紧耦合神经网络与视觉惯导里程计的稠密深度重建(ICRA2021 Best Paper Finalist)...
  2. Struts2笔记——第一个实例HelloWorld
  3. GIT的基本操作(建立自己的git远程仓库)
  4. mysql小写转大写UPPER() 和大写转小写LOWER()
  5. Python数据库连接池DBUtils
  6. Repository(资源库)模式
  7. openstack中彻底删除计算节点的操作记录
  8. CentOS7下安装 mysql5.7.25(glibc版)(可用)
  9. Web Part加载错误的一点经验
  10. 现代优化算法 之 模拟退火
  11. Android集成讯飞语音、百度语音、阿里语音识别
  12. win7显示安装程序正在启动服务器失败,Win7安装程序正在启动服务怎么办?
  13. 驾驶员疲劳监测系统DMS
  14. 手机qq邮箱html,手机QQ邮箱在哪里找
  15. mysql中exec语句,sqlserver 中EXEC和sp
  16. 【WinSock】TCP UDP Boardcast Multicast
  17. Scala—— 18.映射Map
  18. undefined reference to `timersub‘ 错误处理
  19. B站小甲鱼零基础python视频P57爬取煎蛋网OOXX妹纸图代码修改
  20. 在hbuilder制作APP时使用echarts:堆叠柱状图

热门文章

  1. LeetCode(26): 删除排序数组中的重复项
  2. python-下拉框处理
  3. 二:数据是用二进制数表示的
  4. 《剑指offer》-中序遍历下一个节点
  5. “进度条”博客——第十三周
  6. 前端性能监控你会监控哪些数据? 如何做?
  7. 牛客:阶乘结果换算进制后得到数字的尾部有几个0
  8. EL表达式判断条件要写在${}内
  9. javascript 的线程问题
  10. [hdu1532]最大流