Kotlin 有一组运算符,可以执行算术,赋值,比较运算符等。 您将在本文中学习如何使用这些运算符。
运算符是对操作数(变量和值)进行运算的特殊符号(字符)。 例如,+是执行加法的运算符。
在 Java 变量文章中,您学习了声明变量并为变量赋值。 现在,您将学习使用运算符对它们执行各种操作。
1.算术运算符
以下是 Kotlin 中的算术运算符列表:
Kotlin 算术运算符
| 运算符 | 含义 |
|---|---|
+ |
加法(也用于字符串连接) |
- |
减法运算符 |
* |
乘法运算符 |
/ |
除法运算符 |
% |
模运算符 |
示例:算术运算符
fun main(args: Array<String>) {val number1 = 12.5val number2 = 3.5var result: Doubleresult = number1 + number2println("number1 + number2 = $result")result = number1 - number2println("number1 - number2 = $result")result = number1 * number2println("number1 * number2 = $result")result = number1 / number2println("number1 / number2 = $result")result = number1 % number2println("number1 % number2 = $result")}
运行该程序时,输出为:
number1 + number2 = 16.0number1 - number2 = 9.0number1 * number2 = 43.75number1 / number2 = 3.5714285714285716number1 % 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 + endprintln(result)}
运行该程序时,输出为:
Talk is cheap. Show me the code. - Linus Torvalds
算术运算符实际上如何工作?
假设您正在使用+算术运算符将两个数字a和b相加。
在后台,表达式a + b调用a.plus(b)成员函数。plus运算符被重载以使用String值和其他基本数据类型( Char 和布尔除外)。
// + operator for basic typesoperator fun plus(other: Byte): Intoperator fun plus(other: Short): Intoperator fun plus(other: Int): Intoperator fun plus(other: Long): Longoperator fun plus(other: Float): Floatoperator fun plus(other: Double): Double// for string concatenationoperator fun String?.plus(other: Any?): String
您也可以通过重载plus()函数,使用+运算符处理用户定义的类型(如对象)。
推荐阅读: Kotlin 运算符重载
这是算术运算符及其对应函数的表:
| 表达式 | 函数名称 | 转换为 |
|---|---|---|
a + b |
加法 | a.plus(b) |
a - b |
减法 | a.minus(b) |
a * b |
乘法 | a.times(b) |
a / b |
除法 | a.div(b) |
a % b |
取余 | 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 = 12number *= 5 // number = number*5println("number = $number")}
运行该程序时,输出为:
number = 60
推荐阅读: 重载 Kotlin 中的赋值运算符。
3.一元前缀和递增/递减运算符
这是一元运算符,它们的含义和相应函数的表:
| 运算符 | 含义 | 表达式 | 转换为 |
|---|---|---|---|
+ |
一元加 | +a |
a.unaryPlus() |
- |
一元减(反转符号) | -a |
a.unaryMinus() |
! |
否定(反转值) | !a |
a.not() |
++ |
递增:值加 1 | ++a |
a.inc() |
-- |
递减:值减 1 | --a |
a.dec() |
示例:一元运算符
fun main(args: Array<String>) {val a = 1val b = truevar c = 1var result: Intvar booleanResult: Booleanresult = -aprintln("-a = $result")booleanResult = !bprintln("!b = $booleanResult")--cprintln("--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 = -12val b = 12// use of greater than operatorval 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) |
注意,or和and是支持中缀表示法的函数。
if和when表达式,和循环在控制流中使用逻辑运算符。
示例:逻辑运算符
fun main(args: Array<String>) {val a = 10val b = 9val c = -1val result: Boolean// result is true is a is largestresult = (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
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]= 12println(a[1])}
运行该程序时,输出为:
212
推荐阅读: Kotlin 索引访问运算符重载
8.调用运算符
以下是在 Kotlin 中使用带有相应函数的调用操作符的一些表达式。
| 表达式 | 转换为 |
|---|---|
a() |
a.invoke() |
a(i) |
a.invoke(i) |
a(i1, i2, ..., in) |
a.inkove(i1, i2, ..., in) |
在 Kotlin 中,括号被翻译为调用invoke成员函数。
推荐阅读: 调用 Kotlin 中的运算符重载
按位运算
与 Java 不同,Kotlin 中没有按位和移位运算符。 为了执行这些任务,使用了各种函数(支持中缀符号):
shl- 符号左移shr- 符号右移ushr- 无符号右移and- 按位和or- 按位或xor- 按位异或inv- 按位反转
访问此页面以了解有关 Kotlin 中按位运算的更多信息。
另外,与 Java 不同,Kotlin 中没有三元运算符。
