Kotlin学习之运算符

14 篇文章 0 订阅

一、操作符重载

Kotlin有一些固定数量象征性的操作符,可以在任何类中使用它们。方法就是创建一个方法,方法名为保留的操作符关键字,这样就可以让操作符的行为映射到此方法上。

重载操作符可以增加代码可读性和简洁性。

1.1什么是操作符重载?

例如,同样是一个+号,在两个数字之间表示加法,在两个字符串之间则表示将它们连接成一个新字符串;对于Kotlin来说,所有重载了运算符的函数都要用operator关键字标记。

所有的Kotlin操作符都是通过特定名称的函数重载实现的。

二、Kotlin与Java相同的运算符

操作符

重载函数

描述

a++/++a

a.inc()

自增

a--/--a

a.dec()

自减

a+b

a.plus(b)

加法或连接字符串

a-b

a.minus(b)

减法

a*b

a.times(b)

乘法

a/b

a.div(b)

除法和整除

a%b

a.rem(b)

取余

a+=b

a.plusAssign(b)

a=a+b

a-=b

a.minusAssign(b)

a=a-b

a*=b

a.timesAssign(b)

a=a*b

a/=b

a.divAssign(b)

a=a/b

a%=b

a.remAssign(b)

a=a%b

!a

a.not()

返回a的逻辑非值

a>b

a.compareTo(b)>0

大于

a

a.compareTo(b)

小于

a>=b

a.compareTo(b)>=0

大于等于

a

a.compareTo(b)

小于等于

a([参数列表])

a.invoke([参数列表])

调用特定参数列表的函数

三、Kotlin与Java使用有差异的运算符

主要存在如下两个:

  1. ==和!=

| 操作符 | 函数 | 

| :-------- | --------:| 

| a==b | a?.equals(b)?:b===null | 

| a!=b | !(a?.equals(b)?:b===null) |

  • a?.equals(b)?:b===null用Java写出来如下:

if(a != null){  return a.equals(b); }else{  return b == null; }

Kotlin调用的是equals方法来比较两个元素是否对象相等,而不是Java中的比较引用相同。

如果要比较两个对象的引用是否相同,可以使用===和!==操作符,这两个操作符和Java中的==和!=是不一样的。

2.[]

| 操作符 | 函数 | 

| :-------- | --------:| 

| a[i] | a.get(i) |

| a[i,j] | a.get(i,j)|

| a[i_1,...,i_n] | a.get(i_1,...,i_n) |

| a[i]=b | a.set(i,b) |

| a[i,j]=b | a.set(i,j,b)|

| a[i_1,...,i_n]=b | a.set(i_1,...,i_n,b) |

  • 与Java不同,Kotlin的这个运算符不仅可以用在数组变量后,也可以用在集合变量后,可以方便地调用和操作数组和集合中的元素。

四、Java中有而Kotlin中没有的运算符

Kotlin中抛弃了类C风格的位运算符,只是定义了几个函数:

Java位运算符

Kotlin中缀

Kotlin函数

描述

~a

a.inv()

按位取非

a&b

a and b

a.and(b)

按位与

a

b

a or b

a.or(b)

按位与

a^b

a xor b

a.xor(b)

按位异或

a

a shl b

a.shl(b)

左移b位

a>>b

a shr b

a.shr(b)

右移b位

a>>>b

a ushr b

a.ushr(b)

无符号右移b位

对于>=、>>>=这三个赋值操作符,Kotlin中没有与之对应的函数。

中缀表示法是Kotlin定义的一种特殊的函数调用方式,标记为infix,并且只有一个参数的扩展函数或成员函数,可以使用这种表示方法。

五、Java中没有而Kotlin中有的运算符

  1. is和!is
  • 用于检查对象是否是某个类的实例,相当于Java中的instanceof运算符。
  1. in和!in
  • a in b重载为b.contains(a),用于检查a是否是b内的元素,b可以是数组、集合和区间。-此运算符可以用在for循环中,用来遍历b中的元素:

val b = arrayOf(1, 2, 3)for(a in b) println(a)

  1. ..
  • a..b重载为a.rangeTo(b),返回一个从a到b的区间,a和b也包含在区间内(闭区间)。要求a和b都是整数,并且a

作者:汪汪一只猫

链接:Kotlin学习之运算符_慕课手记

来源:慕课网

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值