Kotlin 运算符

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

Java 变量 文章中,您学习了如何声明变量和给变量赋值。现在,您将学习如何使用运算符对它们进行各种操作。


1. 算术运算符

以下是 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

算术运算符是如何工作的?

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

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

// + operator for basic types
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

// for string concatenation
operator fun String?.plus(other: Any?): String

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

推荐阅读: Kotlin 运算符重载

以下是算术运算符及其对应函数的表格

表达式 函数名称 翻译为
a + b plus a.plus(b)
a - b minus a.minus(b)
a * b times a.times(b)
a / b div a.div(b)
a % b mod a.mod(b)

2. 赋值运算符

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

val age = 5

这里,使用 = 运算符将 5 赋值给变量 age

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

表达式 等同于 翻译为
a +=b a = a + b a.plusAssign(b)
a -= b a = a - b a.minusAssign(b)
a *= b a = a * b a.timesAssign(b)
a /= b a = a / b a.divAssign(b)
a %= b a = a % b a.modAssign(b)

示例:赋值运算符

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

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

运行程序后,输出将是

number = 60

推荐阅读:Kotlin 中赋值运算符的重载


3. 一元前缀及递增/递减运算符

以下是一元运算符、它们的含义和相应函数的表格

运算符 含义 表达式 翻译为
+ 一元加 +a a.unaryPlus()
- 一元负号(反转符号) -a a.unaryMinus()
! not(反转值) !a a.not()
++ 递增:将值增加 1 ++a a.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

推荐阅读:重载一元运算符


4. 比较和相等运算符

以下是相等和比较运算符、它们的含义和相应函数的表格

运算符 含义 表达式 翻译为
> 大于 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?.equals(b) ?: (b === null)
!= 不等于 a != b !(a?.equals(b) ?: (b === null))

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


示例:比较和相等运算符

fun main(args: Array<String>) {

    val a = -12
    val b = 12

    // use of greater than operator
    val max = if (a > b) {
        println("a is larger than b.")
        a
    } else {
        println("b is larger than a.")
        b
    }

    println("max = $max")
}

运行程序后,输出将是

b is larger than a.
max = 12

推荐阅读:Kotlin 中比较和相等运算符的重载


5. 逻辑运算符

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

以下是逻辑运算符、它们的含义和相应函数的表格。

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

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

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


示例:逻辑运算符

fun main(args: Array<String>) {

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

    // result is true is a is largest
    result = (a>b) && (a>c) // result = (a>b) and (a>c)
    println(result)
}

运行程序后,输出将是

true

推荐阅读:Kotlin 中逻辑运算符的重载 


6. in 运算符

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

运算符 表达式 翻译为
in a in b b.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 array contains 4.")
    }
}

运行程序后,输出将是

numbers array contains 4.

推荐阅读:Kotlin in 运算符重载


7. 索引访问运算符

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

表达式 翻译为
a[i] a.get(i)
a[i, n] a.get(i, n)
a[i1, i2, ..., in] a.get(i1, i2, ..., in)
a[i] = b a.set(i, b)
a[i, n] = b a.set(i, n, b)
a[i1, i2, ..., in] = b a.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

推荐阅读:Kotlin 索引访问运算符重载


8. Invoke 运算符

以下是一些使用 invoke 运算符及其在 Kotlin 中对应函数的表达式。

表达式 翻译为
a() a.invoke()
a(i) a.invoke(i)
a(i1, i2, ..., in) a.invoke(i1, i2, ..., in)
a[i] = b a.set(i, b)

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

推荐阅读:Kotlin 中 Invoke 运算符重载


位运算

与 Java 不同,Kotlin 中没有位运算符和位移运算符。要执行这些任务,会使用各种函数(支持中缀表示法)

  • shl - 有符号左移
  • shr - 有符号右移
  • ushr - 无符号右移
  • and - 按位与
  • or - 按位或
  • xor - 按位异或
  • inv - 按位取反

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


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

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战