Kotlin 运算符

Kotlin有一组运算符,可以执行算术,赋值,比较运算符等。您将在本文中学习如何使用这些运算符。

运算符是对操作数(变量和值)执行运算的特殊符号(字符)。例如,+ 是执行加法的运算符。

Kotlin变量文章中,您学习了声明变量并为变量分配值。现在,您将学习使用运算符对它们执行各种操作。

算术运算符

以下是Kotlin中的算术运算符列表:

Kotlin算术运算符
运算符描述
+加法运算符(也用于字符串连接)
-减法运算符
*乘法运算符
/除法运算符
求模运算符

示例:算术运算符

fun main(args: Array<String>) {

    val number1 = 12.5
    val number2 = 3.5
    var result: Double

    result = number1 + number2
    println("number1 + number2 = $result")

    result = number1 - number2
    println("number1 - number2 = $result")

    result = number1 * number2
    println("number1 * number2 = $result")

    result = number1 / number2
    println("number1 / number2 = $result")

    result = number1 % number2
    println("number1 % number2 = $result")
}

运行该程序时,输出为:

number1 + number2 = 16.0
number1 - number2 = 9.0
number1 * number2 = 43.75
number1 / number2 = 3.5714285714285716
number1 % number2 = 2.0

+ 运算符,还可用于级联String值,将字符串拼接在一起。

示例:字符串的串联

fun main(args: Array<String>) {

    val start = "Talk is cheap. "
    val middle = "Show me the code. "
    val end = "- Linus Torvalds"

    val result = start + middle + end
    println(result)
}

运行该程序时,输出为:

Talk is cheap. Show me the code. - Linus Torvalds

算术运算符实际上如何工作?

假设您正在使用 + 算术运算符将两个数字a和b相加。

在后台,表达式a + b 调用 a.plus(b) 成员函数。plus运算符被重载以处理 String 值和其他基本数据类型(CharBoolean除外)。

// + 基本类型的运算符
operator fun plus(other: Byte): Int
operator fun plus(other: Short): Int
operator fun plus(other: Int): Int
operator fun plus(other: Long): Long
operator fun plus(other: Float): Float
operator fun plus(other: Double): Double

// 对字符串串联
operator fun String?.plus(other: Any?): String

您还可以使用 + 运算符通过重载plus()函数来处理用户定义的类型(如对象)。

推荐阅读: Kotlin 运算符重载

这是算术运算符及其相应函数的列表:

表达式函数名称用法
a + ba.plus(b)
a-ba.minus(b)
a * b
a.times(b)
a / b
a.div(b)
a%b求模a.mod(b)

赋值运算符

赋值运算符用于为变量赋值。我们之前已经使用过简单的 = 赋值运算符。

val age = 5

在此,使用 = 运算符将 5 分配给变量 age。

以下是所有赋值运算符及其对应函数的列表:

表达式相当于用法
a + = ba = a + ba.plusAssign(b)
a-= ba = a-ba.minusAssign(b)
a * = ba = a * ba.timesAssign(b)
a / = ba = a / ba.divAssign(b)
a%= ba = a%ba.modAssign(b)

示例:赋值运算符

fun main(args: Array<String>) {
    var number = 12

    number *= 5   // number = number*5
    println("number  = $number")
}

运行该程序时,输出为:

number = 60

一元前缀 和 递增/递减运算符

这是一元运算符,它们的含义和相应功能的表:

运算符描述表达式用法
+一元加+aa.unaryPlus()
-一元减-aa.unaryMinus()
不是(反转值)!aa.not()
++递增:值加1++aa.inc()
--递减:值减1--a
a.dec()

示例:一元运算符

fun main(args: Array<String>) {
    val a = 1
    val b = true
    var c = 1

    var result: Int
    var booleanResult: Boolean

    result = -a
    println("-a = $result")

    booleanResult = !b
    println("!b = $booleanResult")

    --c
    println("--c = $c")
}

运行该程序时,输出为:

-a = -1
!b = false
--c = 0

比较运算符 和 相等运算符

这是一个相等和比较运算符,它们的含义以及相应函数的列表:

运算符描述表达式用法
>大于a> ba.compareTo(b)> 0
<小于a <ba.compareTo(b)<0
> =大于 或 等于a> = ba.compareTo(b)>= 0
<=小于 或 等于a <= ba.compareTo(b)<= 0
==等于a == ba?.equals(b)?:(b === null)
!=不等于a!= b!(a?.equals(b)?:(b ===null))

比较和相等运算符用于控制流,例如:if 表达式when表达式 循环

示例:比较和相等运算符

fun main(args: Array<String>) {

    val a = -12
    val b = 12

    //使用大于运算符
    val max = if (a > b) {
        println("a大于b")
        a
    } else {
        println("b大于a")
        b
    }

    println("max = $max")
}

运行该程序时,输出为:

b大于a
max = 12

逻辑运算符

Kotlin中有两个逻辑运算符:|| 和 &&

这是逻辑运算符,它们的含义和相应函数的表。

运算符描述表达式对应函数
||如果任一布尔表达式为true,则为true
(a>b)||(a<c)(a>b)or(a<c)
&&如果所有布尔表达式均为true,则为true(a>b)&&(a<c)(a>b)and(a<c)

请注意,or 和 and 是支持中缀表示法的函数。

逻辑运算符用于控制流,例如 if表达式when表达式 循环

示例:逻辑运算符

fun main(args: Array<String>) {

    val a = 10
    val b = 9
    val c = -1
    val result: Boolean

    // result 为 true 是最大
    result = (a>b) && (a>c) // result = (a>b) and (a>c)
    println(result)
}

运行该程序时,输出为:

true

in 运算符

in运算符用于检查一个对象是否属于一个集合。

运算符表达式用法
in
a in bb.contains(a)
!in
a !in b
!b.contains(a)

示例:in 运算符

fun main(args: Array<String>) {

    val numbers = intArrayOf(1, 4, 42, -3)

    if (4 in numbers) {
        println("numbers 数组包含 4.")
    }
}

运行该程序时,输出为:

numbers 数组包含  4.

索引访问运算符

以下是在Kotlin中使用带有相应函数的索引访问运算符的一些表达式。

表达用法
a[i]a.get(i)
a[i, n]a.get(i, n)
a[i1, i2, ..., in]a.get(i1, i2, ..., in)
a[i] = ba.set(i, b)
a[i, n] = ba.set(i, n, b)
a[i1, i2, ..., in] = ba.set(i1, i2, ..., in, b)

示例:索引访问运算符

fun main(args: Array<String>) {

    val a  = intArrayOf(1, 2, 3, 4, - 1)
    println(a[1])   
    a[1]= 12
    println(a[1])
}

运行该程序时,输出为:

2
12

invoke 运算符

以下是Kotlin中使用带有相应函数的invoke运算符的一些表达式。

表达翻译成
a()a.invoke()
a(i)a.invoke(i)
a(i1, i2, ..., in)a.inkove(i1, i2, ..., in)
a[i] = ba.set(i, b)

在Kotlin中,括号被转换为调用invoke成员函数。

按位运算

与Java不同,Kotlin中没有按位和移位运算符。为了执行这些任务,使用了各种功能(支持中缀符号):

  • shl - 签名左移

  • shr - 右移签名

  • ushr - 无符号右移

  • and - 按位与

  • or - 按位或

  • xor - 按位异或

  • inv - 按位反

访问此页面以了解有关Kotlin中按位运算更多信息。

另外,与Java不同,Kotlin中没有三元运算符。