疯狂kotlin讲义连载之运算符和表达式——与Java相同的运算符

435 阅读3分钟

Java支持的运算符包括算术运算符,赋值运算符、扩展后的赋值运算符、比较运算符、逻辑运算符,Kotlin完全支持这些运算符。

Kotlin不支持Java的三目运算符——Kotlin使用if表达式代替了三目运算符。

Kotlin的位运算符与Java的位运算符也略有区别。

但有一点需要说明:Kotlin的运算符都是以方法形式来实现的,这些运算符都具有特定的符号(如+*)和固定的优先级。

各种运算符对应的方法名都是固定的,我们只要为某个类型提供了特定名称(比如双目+运算符对应的方法名为plus)的方法,成员方法或扩展方法都可,接下来即可对该类型的对象使用+进行运算——因此Kotlin的所有运算符的功能都是广义的,它不仅能作用于数值型、字符串,也可作用于任意自定义的Kotlin类。本章后面内容会介绍运算符重载的知识。

3.1.1一目前缀运算符

一目前缀运算符有+-!这三个。它们对应的固定方法名依次如表3.1所示。

3.1一目前缀运算符


运算符
对应的方法
+a
a.unaryPlus()
-a
a.unaryMinus()
!a
a.not()

例如如下程序:

程序清单:

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()的效果是完全一样的;!flagflag.not()的效果也是完全一样的,因此以后读者在查阅API时发现某个类有unaryPlus()unaryMinus()not()方法,那就说明可对该类的实例使用单目前缀的+-!进行运算。

3.1.2自加和自减

自加或自减对应的固定方法名依次如表3.2所示。

3.2自加自减

运算符
对应的方法
a++
a.inc()
a--
a.dec()

由于++--放在变量前后是有区别的,因此自加、自减的inc(),dec()两个方法还不完全等同于a++a--。
当++--放在变量之前时,执行过程如下:

1)先对变量调用inc()dec()方法,并将方法返回值赋值给变量。

2)自加或自减表达式返回变量的新值。

当++--放在变量之后时,执行过程如下:

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双目算术运算符


运算符
对应的方法
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)

例如如下程序:

程序清单:
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..运算符,本章的区间运算符就是专门介绍它们。

以上内容节选自《疯狂Kotlin讲义》:一本让您最直接认识Kotlin的疯狂讲义


本书即将于2017年11月发售 敬请期待
往期连载