Kotlin学习之运算符

作者: 程序员丶星霖 | 来源:发表于2017-11-21 08:20 被阅读619次

    Kotlin学习之运算符

    一、操作符重载

    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<b a.compareTo(b)<0 小于
    a>=b a.compareTo(b)>=0 大于等于
    a<=b a.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函数 描述
    ~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<<b 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<=b。

    学海无涯苦作舟

    我的微信公众号.jpg

    相关文章

      网友评论

        本文标题:Kotlin学习之运算符

        本文链接:https://www.haomeiwen.com/subject/jhvmvxtx.html