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 值和其他基本数据类型(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 | 加 | a.plus(b) |
a-b | 减 | a.minus(b) |
a * b | 乘 | a.times(b) |
a / b | 除 | a.div(b) |
a%b | 求模 | a.mod(b) |
赋值运算符
赋值运算符用于为变量赋值。我们之前已经使用过简单的 = 赋值运算符。
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
一元前缀 和 递增/递减运算符
这是一元运算符,它们的含义和相应功能的表:
运算符 | 描述 | 表达式 | 用法 |
---|---|---|---|
+ | 一元加 | +a | a.unaryPlus() |
- | 一元减 | -a | a.unaryMinus() |
! | 不是(反转值) | !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
比较运算符 和 相等运算符
这是一个相等和比较运算符,它们的含义以及相应函数的列表:
运算符 | 描述 | 表达式 | 用法 |
---|---|---|---|
> | 大于 | 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中有两个逻辑运算符:|| 和 &&
这是逻辑运算符,它们的含义和相应函数的表。
运算符 | 描述 | 表达式 | 对应函数 |
---|---|---|---|
|| | 如果任一布尔表达式为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 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中使用带有相应函数的索引访问运算符的一些表达式。
表达 | 用法 |
---|---|
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
invoke 运算符
以下是Kotlin中使用带有相应函数的invoke运算符的一些表达式。
表达 | 翻译成 |
---|---|
a() | a.invoke() |
a(i) | a.invoke(i) |
a(i1, i2, ..., in) | a.inkove(i1, i2, ..., in) |
a[i] = b | a.set(i, b) |
在Kotlin中,括号被转换为调用invoke成员函数。
按位运算
与Java不同,Kotlin中没有按位和移位运算符。为了执行这些任务,使用了各种功能(支持中缀符号):
shl - 签名左移
shr - 右移签名
ushr - 无符号右移
and - 按位与
or - 按位或
xor - 按位异或
inv - 按位反
访问此页面以了解有关Kotlin中按位运算更多信息。
另外,与Java不同,Kotlin中没有三元运算符。