Kotlin学习笔记(四):操作符

一元操作符

Kotlin中一元操作符分为 一元前缀操作符递增与递减操作符

一元前缀操作符

这些操作符以及所有其他操作符都针对基本类型做了优化,不会为它们引入函数的调用:

  • +a ==> a.unaryPlus()
  • -a ==> a.unaryMinus()
  • !a ==> a.not()

递增递减运算符

inc() 和 dec() 函数返回一个值,它用于赋值给使用++ 或 – 操作的变量。

  • a++ ==> a=a.inc()
  • a-- ==> a=a.dec()

计算表达式的步骤是:

  • 把 a 的初始值存储到临时空间a0
  • 把 a.inc() 结果赋值给 a
  • 把 a0作为表达式的结果返回

二元运算符

在Kotlin中所有算数运算符的本质,均是调用了它们对应的函数

算数运算符

  • 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)

注意:%运算 ,自 Kotlin 1.1 起支持 rem 运算符。Kotlin 1.0 使用 mod 运算符,mod 运算符在Kotlin 1.1 中被弃用。

	data class Counter(val dayIndex: Int) {
		operator fun plus(increment: Int): Counter {
			return Counter(dayIndex + increment)
		}
	}

" in "操作符

  • a in b ==> b.contains(a)
  • a !in b ==> b.contains(a)

b.contains(a)函数: 用来判断在b中是否包含a,返回值为布尔类型

数组操作符

方括号转换为调用带有适当数量参数的 get 和 set 函数。

表达式含义
a[i]a.get(i)
a[i, j]a.get(i, j)
a[i_1, …, i_n]a.get(i_1, …, i_n)
a[i] = ba.set(i, b)
a[i, j] = ba.set(i, j, b)
a[i_1, …, i_n] = ba.set(i_1, …, i_n, b)

调用操作符

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

表达式含义
a()a.invoke()
a(i)a.invoke(i)
a(i, j)a.invoke(i, j)
a(i_1, ……, i_n)a.invoke(i_1, ……, i_n)

复合操作符

对于复合赋值操作,先进性逻辑运算,再进行赋值

表达式含义
a += ba.plusAssign(b)
a -= ba.minusAssign(b)
a *= ba.timesAssign(b)
a /= ba.divAssign(b)
a %= ba.remAssign(b)

注意:赋值在 Kotlin 中不是表达式。

相等与不等操作符

这些操作符只使用函数 equals(other: Any?): Boolean,可以覆盖它来提供自定义的相等性检测实现。不会调用任何其他同名函数(如 equals(other: Foo))。

表达式含义
a == ba?.equals(b) ?: (b === null)
a != b!(a?.equals(b) ?: )

注意:=== 和 !==(同一性检查)不可重载,因此不存在对他们的约定。
这个 == 操作符有些特殊:它被翻译成一个复杂的表达式,用于筛选 null 值。
null == null 总是 true,
对于非空的 x,x == null 总是 false 而不会调用 x.equals()。.

比较操作符

所有的比较都转换为对 compareTo 的调用,这个函数需要返回 Int 值

表达式含义
a > ba.compareTo(b) > 0
a < ba.compareTo(b) < 0
a >= ba.compareTo(b) >= 0
a <= ba.compareTo(b) <= 0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值