Kotlin操作符

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)

前缀操作符
表达式翻译为
+aa.unaryPlus()
-aa.unaryMinus()
!aa.not()
递增和递减
表达式翻译为
a++a.inc() 返回值是a
a--a.dec() 返回值是a
++aa.inc() 返回值是a+1
--aa.dec() 返回值是a-1

3.7.6 二元操作符

算术运算符
表达式翻译为
a + ba.plus(b)
a - ba.minus(b)
a * ba.times(b)
a / ba.div(b)
a % ba.rem(b)a.mod(b)
a..ba.rangeTo(b)
in操作符
表达式翻译为
a in bb.contains(a)
a !in b!b.contains(a)
索引访问操作符
表达式翻译为
a[i]a.get(i)
a[i] = ba.set(i, b)

方括号转换为调用带有适当数量参数的 getset

调用操作符
表达式翻译为
a()a.invoke()
a(i)a.invoke(i)

圆括号转换为调用带有适当数量参数的 invoke

计算并赋值
表达式翻译为
a += ba.plusAssign(b)
a -= ba.minusAssign(b)
a *= ba.timesAssign(b)
a /= ba.divAssign(b)
a %= ba.modAssign(b)

对于赋值操作,例如 a += b,编译器会试着生成 a = a + b 的代码(这里包含类型检查:a + b 的类型必须是 a 的子类型)。

相等与不等操作符

Kotlin 中有两种类型的相等性:

  • 引用相等 === !==(两个引用指向同一对象)
  • 结构相等 == !=( 使用equals() 判断)
表达式翻译为
a == ba?.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 > ba.compareTo(b) > 0
a < ba.compareTo(b) < 0
a >= ba.compareTo(b) >= 0
a <= ba.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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值