版权声明:不为无益之事,何以遣有涯之生。 https://blog.csdn.net/lj402159806/article/details/81355027
kotlin操作符
kotlin操作符优先级
优先级 |
说明 |
符号 |
最高 |
后缀(Postfix ) |
++ , -- , . , ?. , ? |
|
前缀(Prefix) |
- , + , ++ , -- , ! , labelDefinition @ |
|
右手类型运算(Type RHS,right-hand side class type (RHS) ) |
: , as , as? |
|
乘除取余(Multiplicative) |
* , / , % |
|
加减(Additive ) |
+ , - |
|
区间范围(Range) |
.. |
|
Infix函数 |
例如,给Int 定义扩展 infix fun Int.shl(x: Int): Int {...} ,这样调用 1 shl 2 ,等同于1.shl(2) |
|
Elvis操作符 |
?: |
|
命名检查符(Named checks) |
in , !in , is , !is |
|
比较大小(Comparison) |
< , > , <= , >= |
|
相等性判断(Equality) |
== , != |
|
与 (Conjunction) |
&& |
|
或 (Disjunction) |
|| |
最低 |
赋值(Assignment) |
= , += , -= , *= , /= , %= |
重载运算符
3.7.5 一元操作符(unary operation)
前缀操作符
表达式 |
翻译为 |
+a |
a.unaryPlus() |
-a |
a.unaryMinus() |
!a |
a.not() |
递增和递减
表达式 |
翻译为 |
a++ |
a.inc() 返回值是a |
a-- |
a.dec() 返回值是a |
++a |
a.inc() 返回值是a+1 |
--a |
a.dec() 返回值是a-1 |
3.7.6 二元操作符
算术运算符
表达式 |
翻译为 |
a + b |
a.plus(b) |
a - b |
a.minus(b) |
a * b |
a.times(b) |
a / b |
a.div(b) |
a % b |
a.rem(b) 、 a.mod(b) |
a..b |
a.rangeTo(b) |
in
操作符
表达式 |
翻译为 |
a in b |
b.contains(a) |
a !in b |
!b.contains(a) |
索引访问操作符
表达式 |
翻译为 |
a[i] |
a.get(i) |
a[i] = b |
a.set(i, b) |
方括号转换为调用带有适当数量参数的 get
和 set
。
调用操作符
表达式 |
翻译为 |
a() |
a.invoke() |
a(i) |
a.invoke(i) |
圆括号转换为调用带有适当数量参数的 invoke
。
计算并赋值
表达式 |
翻译为 |
a += b |
a.plusAssign(b) |
a -= b |
a.minusAssign(b) |
a *= b |
a.timesAssign(b) |
a /= b |
a.divAssign(b) |
a %= b |
a.modAssign(b) |
对于赋值操作,例如 a += b
,编译器会试着生成 a = a + b
的代码(这里包含类型检查:a + b
的类型必须是 a
的子类型)。
相等与不等操作符
Kotlin 中有两种类型的相等性:
- 引用相等
===
!==
(两个引用指向同一对象)
- 结构相等
==
!=
( 使用equals()
判断)
表达式 |
翻译为 |
a == b |
a?.equals(b) ?: (b === null) |
a != b |
!(a?.equals(b) ?: (b === null)) |
Elvis 操作符 ?:
在Kotin中,Elvis操作符特定是跟null比较。也就是说
y = x?:0
等价于
val y = if(x!==null) x else 0
主要用来作null
安全性检查。
比较操作符
表达式 |
翻译为 |
a > b |
a.compareTo(b) > 0 |
a < b |
a.compareTo(b) < 0 |
a >= b |
a.compareTo(b) >= 0 |
a <= b |
a.compareTo(b) <= 0 |
用infix函数自定义中缀操作符
可以通过自定义infix函数来实现中缀操作符。
参考:https://github.com/EasyKotlin/chapter3_kotlin_basics#374-%E6%93%8D%E4%BD%9C%E7%AC%A6%E4%BC%98%E5%85%88%E7%BA%A7precedence