继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Kotlin学习之运算符

汪汪一只猫
关注TA
已关注
手记 575
粉丝 129
获赞 718

一、操作符重载

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

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

1.1什么是操作符重载?

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

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

二、Kotlin与Java相同的运算符

操作符重载函数描述
a++/++aa.inc()自增
a--/--aa.dec()自减
a+ba.plus(b)加法或连接字符串
a-ba.minus(b)减法
a*ba.times(b)乘法
a/ba.div(b)除法和整除
a%ba.rem(b)取余
a+=ba.plusAssign(b)a=a+b
a-=ba.minusAssign(b)a=a-b
a*=ba.timesAssign(b)a=a*b
a/=ba.divAssign(b)a=a/b
a%=ba.remAssign(b)a=a%b
!aa.not()返回a的逻辑非值
a>ba.compareTo(b)>0大于
a<ba.compareTo(b)<0小于
a>=ba.compareTo(b)>=0大于等于
a<=ba.compareTo(b)<=0小于等于
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函数描述
~aa.inv()按位取非
a&ba and ba.and(b)按位与
aba or ba.or(b)按位与
a^ba xor ba.xor(b)按位异或
a<<ba shl ba.shl(b)左移b位
a>>ba shr ba.shr(b)右移b位
a>>>ba ushr ba.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<=b。

原文链接:http://www.apkbus.com/blog-815579-77218.html

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP