Kotlin——运算符和表达式

作者: So_ProbuING | 来源:发表于2021-04-25 11:22 被阅读0次

    与Java相同的运算符

    Kotlin完全支持Java的运算符

    • Kotlin不支持Java的三目运算符——Kotlin使用if表达式代替了三目运算符
    • Kotlin的位运算符与Java的位运算符也略有区别

    Kotlin的运算符都是以方法形式来实现的,这些运算符都具有特定的符号和固定的优先级,各种运算符对应的方法名都是固定的,我们只要为某类型提供了特定名称的方法,成员方法或扩展方法。接下来即可对该类型的对象使用“+”进行运算,因此,Kotlin的所有运算符的功能都是广义的,不仅能作用于数值型、字符串,也可以作用于任意自定义的Kotlin类

    单目前缀运算符

    单目前缀运算符有:+(一元加)、-(一元减)、!(非)

    • 对应的方法
    运算符 对应的方法
    +a a.unaryPlus()
    -a a.unaryMinus()
    !a a.not()
       var a : Int = 20;
        //使用运算符
        val b = -a
        //调用运算符方法
        val c = a.unaryPlus();
        println("b的值${b}c的值${c}")
        val flag = true
        val notFlag = !flag
        println("flag !${notFlag}")
    

    自加和自减运算符

    运算符 对应的方法
    a++ a.inc()
    a-- a.dec()
    • ++、--放置在不同位置对运算的影响
      当++、--放在变量前面时,执行过程:
    1. 先对变量调用inc()、dec()方法,并将方法返回值赋给变量
    2. 自加或自减表达式返回变量的新值

    当++、--放在变量后面是,执行过程:

    1. 先用一个临时变量缓存变量的值
    2. 对变量调用inc()、dec()方法,并将方法返回值赋给变量
    3. 自加或自减表达式返回临时变量的值
      var a = 20;
        a++
        print(a); //21
        //调用方法
        a = a.inc() //22
        print(a)
    

    双目运算符

    运算符 对应的方法
    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.rangeTo(b)
       var a = 5
        var b = 6
        //+
        println(a+b)
        println(a.plus(b))
        //-
        println(a-b)
        println(a.minus(b))
        //*
        println(a*b)
        println(a.times(b))
        ///
        println(a/b)
        println(a.div(b))
        //%
        println(a%b)
        println(a.rem(b))
        //..
        println(a..b)
        println(a.rangeTo(b))
    

    in和!in运算符

    a in b 判断b中是否包含a

    运算符 对应的方法
    a in b b.contains(a)
    a !in b !b.minus(s)
       var s = "hello world"
        var si = "hello"
        println(si in s)
        println(s.contains(si))
    

    索引访问运算符

    运算符 对应的方法
    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)
      var s = "testIndexOperation"
        //get
        println(s.get(3))
        println(s[3])
        //java List
        var list = ArrayList<String>()
        list.add("add1")
        list.add("add2")
        list.add("add3")
        list.add("add4")
        //使用索引运算符
        println(list[3])
        //使用get函数
        println(list.get(3))
    
    

    调用运算符

    运算符 对应方法
    a() a.invoke()
    a(b) a.invoke(b)
    a(b1,b2) a.invoke(b1,b2)
    a(b1,b2,b3...) a.invoke(b1,b2,b3,...)

    广义赋值运算符

    运算符 对应的方法
    a+=b a.plusAssign(b)
    a-=b a.minusAssign(b)
    a*=b a.timeAssign(b)
    a/=b a.divAssign(b)
    a%=b a.remAssign(b)

    对于广义赋值操作,例如 a+=b,编译器会先判断plusAssign()方法是否存在,如果存在则按照如下步骤执行

    1. 如果plus()方法也存在,则会报错
    2. 确保plusAssign()没有返回值
    3. 如果满足 1、2两步的检查,那么转换为执行a.plusAssign(b),如果plusAssign()方法不存在,那么a+=b 将转换为 a=a+b

    相等于不相等运算符

    运算符 对应的方法
    a==b a?.equals(b)?:(b===null)
    a!=b !(a?.equals(b)?:(b===null))

    Kotlin的“==”不再比较两个变量是否引用同一个对象,实际上“==”与equals()比较基本是等义的,只不过==比较是空指针安全的

    而在Kotlin中 判断两个变量是否指向同一个对象 要使用 ===

    比较运算符

    运算符 对应的方法
    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..b用于顶一个一个从a~b(包括a、b边界值)的所有值的区间,对于闭区间运算符而言 a不能大于b

    半开区间运算符

    半开区间运算符 a until b 用于定义一个从a~b(包括a边界,不包括b)的所有值的区间。同样也是a不能大于b

    反向区间

    如果希望区间可以从大到小,则可以使用downTo运算符,该运算符同样构建一个闭区间。此时要求b不能大于a

    区间步长

    我们可以通过step运算符,可以显式指定区间的步长

    for (num in 7 downTo 1 step 2){
            println("${num}")
        }
    

    运算符装载

    Kotlin的运算符都是靠特定名称的方法支撑的,因此只要重载这些名称的方法,我们就可以为任意类添加运算符
    重载运算符的方法需要使用operator修饰符进行标记

    重在单目前缀运算符

    只要为任意类定义名为unaryPlus()、unaryMinus()、not() 且以operator修饰的方法,程序即可对该类的实例使用+、-、!单目前缀运算符

    相关文章

      网友评论

        本文标题:Kotlin——运算符和表达式

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