跳到主要内容

Kotlin 运算符

提示
  1. 算术运算符:Kotlin 提供了常规算术运算符(如 +, -, *, /, %),用于执行数学运算。+ 运算符还可用于字符串连接。

  2. 赋值运算符:Kotlin 使用赋值运算符(如 =, +=, -=, *=, /=, %=)来赋值及执行简单的算术操作并赋值。

  3. 比较和逻辑运算符:Kotlin 提供比较运算符(如 >, <, >=, <=, ==, !=)和逻辑运算符(&&, ||, !)用于条件判断和布尔逻辑。

运算符是执行操作数(变量和值)操作的特殊符号(字符)。例如,+ 是一个执行加法的运算符(也用于字符串连接)。

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

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 = "说话是便宜的。"
val middle = "给我看代码。"
val end = "- 林纳斯·托瓦兹"

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

当您运行程序时,输出将是:

说话是便宜的。给我看代码。- 林纳斯·托瓦兹

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

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

在底层,表达式 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 + bplusa.plus(b)
a - bminusa.minus(b)
a * btimesa.times(b)
a / bdiva.div(b)
a % bmoda.mod(b)

2. 赋值运算符

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

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

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

3. 一元前缀和增减运算符

以下是一元运算符的表格,它们的含义及相应函数:

运算符含义表达式转换为
+一元正+aa.unaryPlus()
-一元负(反转符号)-aa.unaryMinus()
!not(反转值)!aa.not()
++自增:值增加 1++aa.inc()
--自减:值减少 1--aa.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 > 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 中比较和相等运算符的重载

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

// 如果 a 是最大的,则结果为 true
result = (a>b) && (a>c) // result = (a>b) and (a>c)
println(result)
}

当你运行程序时,输出将是:

true

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

6. in 运算符

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

运算符表达式翻译为
ina in bb.contains(a)
!ina !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 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] = ba.set(i, b)
a[i, n] = ba.set(i, n, b)
a[i1, i2, ..., in] = ba.set(i1, i2, ..., in, b)

示例:索引访问运算符


```kotlin
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. 调用运算符

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

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

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

推荐阅读:Kotlin 中调用运算符的重载

位运算

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

  • shl - 带符号向左位移
  • shr - 带符号向右位移
  • ushr - 无符号向右位移
  • and - 位与
  • or - 位或
  • xor - 位异或
  • inv - 位非

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

此外,Kotlin 中没有 Java 中的三元运算符。