Kotlin 运算符
-
算术运算符:Kotlin 提供了常规算术运算符(如
+
,-
,*
,/
,%
),用于执行数学运算。+
运算符还可用于字符串连接。 -
赋值运算符:Kotlin 使用赋值运算符(如
=
,+=
,-=
,*=
,/=
,%=
)来赋值及执行简单的算术操作并赋值。 -
比较和逻辑运算符: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)
}
当您运行程序时,输出将是:
说话是便宜的。给我看代码。- 林纳斯·托瓦兹
算术运算符实际是如何工作的?
假设您正在使用 +
算术运算符来加两个数字 a
和 b
。
在底层,表达式 a + b
调用了 a.plus(b)
成员函数。plus
运算符被重载以用于 String
值和其他基本数据类型(除了 Char 和 Boolean)。
// 基本类型的 + 运算符
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 + 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
// 使用大于运算符
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)
|
注意,or
和 and
是支持 中缀表示法 的函数。
逻辑运算符用于控制流程,如 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
运算符用于检查对象是否属于集合。
运算符 | 表达式 | 翻译为 |
---|---|---|
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 数组包含 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] = 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) |
示例:索引访问运算符
```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] = b | a.set(i, b) |
在 Kotlin 中,括号被翻译为调用 invoke
成员函数。
推荐阅读:Kotlin 中调用运算符的重载
位运算
与 Java 不同的是,Kotlin 中没有位运算和位移运算符。为了执行这些任务,使用了各种函数(支持中缀表示法):
shl
- 带符号向左位移shr
- 带符号向右位移ushr
- 无符号向右位移and
- 位与or
- 位或xor
- 位异或inv
- 位非
访问此页面以了解更多关于 Kotlin 中的位运算。
此外,Kotlin 中没有 Java 中的三元运算符。