Java支持的运算符包括算术运算符,赋值运算符、扩展后的赋值运算符、比较运算符、逻辑运算符,
Kotlin
彻底支持这些运算符。
Kotlin
不支持
Java
的三目运算符——
Kotlin
使用
if
表达式代替了三目运算符。
Kotlin
的位运算符与
Java
的位运算符也略有区别。
但有一点须要说明:
Kotlin
的运算符都是以方法形式来实现的,这些运算符都具备特定的符号(如
+
或
*
)和固定的优先级。
各类运算符对应的方法名都是固定的,咱们只要为某个类型提供了特定名称(好比双目+运算符对应的方法名为
plus
)的方法,成员方法或扩展方法均可,接下来便可对该类型的对象使用
+
进行运算
——所以
Kotlin
的全部运算符的功能都是广义的,它不只能做用于数值型、字符串,也可做用于任意自定义的
Kotlin
类。本章后面内容会介绍运算符重载的知识。
3.1.1一目前缀运算符
一目前缀运算符有+
、-
、!
这三个。它们对应的固定方法名依次如表3.1
所示。
表3.1一目前缀运算符html
例如以下程序:
程序清单:缓存
codes\03\3.1\UnaryTest.kt
fun main(args: Array<String>) {
var a = 20;
//
用运算符
val b = -a;
//
调用方法
val c = a.unaryMinus();
println("b: ${b}, c: ${c}");
val flag = true
//
用运算符
val notFlag1 = !flag
//
调用方法
val notFlag2 = flag.not()
println("notFlag1: ${notFlag1}, notFlag2: ${notFlag2}");
}
从上面粗体字代码能够看出
-a与a.unaryMinus()
的效果是彻底同样的;
!flag
与
flag.not()
的效果也是彻底同样的,所以之后读者在查阅
API
时发现某个类有
unaryPlus()
、
unaryMinus()
、
not()方法,那就说明可对该类的实例使用单目前缀的+
、
-
、
!进行运算。
3.1.2自加和自减
自加或自减对应的固定方法名依次如表
3.2
所示。
表
3.2
自加自减
因为++
、--
放在变量先后是有区别的,所以自加、自减的inc(),dec()两个方法还不彻底等同于a++
、
a--。
当++
、--
放在变量以前时,执行过程以下:
(1)先对变量调用inc()、dec()方法,并将方法返回值赋值给变量。post
(
2
)自加或自减表达式返回变量的新值。
当++、--放在变量以后时,执行过程以下:spa
(
1
)先将一个临时变量缓存变量的值。
(
2
)对变量调用
inc()
、
dec()方法,并将方法返回值赋值给变量。
(
3
)自加或自减表达式返回临时变量的值。
例如以下程序:
程序清单:
codes\03\3.1\SelfInc.kt
fun main(args: Array<String>) {
var a = 20
a++
println("a: ${a}") //
输出
21
//
如下代码大体至关于
a++
a = a.inc()
println("a: ${a}") //
输出
22
}
因而可知,之后读者在查阅
API
时发现某个类有
inc
()
、
dec()方法,那就说明可对该类的实例使用++、--
进行运算。
3.1.3双目算术运算符
双目算术运算符对应的固定方法名依次如表
3.3所示。
表3.3双目算术运算符code
例如以下程序:
程序清单:
codes\03\3.1\Arthimetic.kt
fun main(args: Array<String>) {
//
加法运算
println(5 + 6)
println(5.plus(6))
//
乘法运算
println(2.3 * 3.4)
println(2.3.times(3.4))
//
求余运算
println(2.5 % 1.2)
println(2.5.rem(1.2))
}
因而可知,之后读者在查阅
API
时发现某个类有带一个参数的
plus()、minus()
、
times()
、
div()
、
rem()
和
rangeTo()方法,那就说明可对该类的实例使用以上算术运算符。
提示:此处暂时不介绍rangeTo和..运算符,本章的区间运算符就是专门介绍它们。cdn 以上内容节选自《疯狂Kotlin讲义》:一本让您最直接认识Kotlin的疯狂讲义
本书即将于2017年11月发售 敬请期待
往期连载
第二期:juejin.im/post/59c1d6… 第三期:juejin.im/post/59e407…对象 第四期:juejin.im/post/59ed77…blog 第五期:juejin.im/post/59eec3…rem
相关书籍《疯狂Android讲义》
item.jd.com/11689014.ht…
|