3.1 与java相同的运算符
- Kotlin不支持三目运算符,使用 if else 代替
- 与java相同kotlin也支持算术运算符、赋值运算符、拓展后的赋值运算符、比较运算符、逻辑运算符,kotlin的运算符都是以方法的形式来实现的
- kotlin个运算符对应的方法名都是固定,运算符功能都是广义的,可作用于任意kotlin自定义的类(不是很理解)
- 单目前缀运算符及方法名 +a ---> a.unaryPlus() -a -----> a.unaryMinus() !a ------> a.not() 某个类如果含有这些方法说明该类的实例可用单目前缀运算符进行运算
- 自增自减运算符 a++ ----> a.inc() , a-- ----> a.dec()
- 双目算术运算符 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..b -----> a.rangeTo(b),某个类如果含有这些方法说明该类的实例可用双目算术符进行运算
- in运算符 a in b -----> b.contains(b) , a !in b -----> !b.contains(b)
- 索引访问运算符、调用运算符、广义赋值运算符、相等于不等运算符、比较运算符
3.2 位运算符
- 与 and(bits) 、或 or(bits)、 非 inv(bits)、 异或 orx(bits)、 左移 shl(bits)、 右移 shr(bits)、无符号右移 ushr(bits)
- Int类型 a shr b , 当b大于32时需要先对b对32取余再右移,即a shr 33 与 a shr 1 的值是相等的,同理Long即b 大于64时需取余
3.3 区间运算符
- 闭区间运算符 a..b (包头又包尾)
- 半开区间运算符 a until b (包头不包尾)
- 反向区间运算符 a downTo b (包头包尾 要求 b < a)
- 区间步长 a downTo b step c 步长 c 指的是每次循环时减少的数, 比如 8 downTo 0 step 4 ---> 8 ----4---0
3.4 运算符重载 (包含单目双目自增自减)
我的理解是重新定制各种运算规则,定制好后可直接用运算符调用定制的方法
例子:data clase Data( val x : Int,val y : Int){
operator fun unaryMinus() : Data(){
return (-x,-y);
}
}
调用 val d = Data(10,2); Log.d ("TAG",-d) --------> 输出得到(-10,-2)