Java支持的运算符包括算术运算符,赋值运算符、扩展后的赋值运算符、比较运算符、逻辑运算符,
Kotlin
完全支持这些运算符。
Kotlin
不支持
Java
的三目运算符——
Kotlin
使用
if
表达式代替了三目运算符。
Kotlin
的位运算符与
Java
的位运算符也略有区别。
但有一点需要说明:
Kotlin
的运算符都是以方法形式来实现的,这些运算符都具有特定的符号(如
+
或
*
)和固定的优先级。
各种运算符对应的方法名都是固定的,我们只要为某个类型提供了特定名称(比如双目+运算符对应的方法名为
plus
)的方法,成员方法或扩展方法都可,接下来即可对该类型的对象使用
+
进行运算
——因此
Kotlin
的所有运算符的功能都是广义的,它不仅能作用于数值型、字符串,也可作用于任意自定义的
Kotlin
类。本章后面内容会介绍运算符重载的知识。
3.1.1一目前缀运算符
一目前缀运算符有+
、-
、!
这三个。它们对应的固定方法名依次如表3.1
所示。
表3.1一目前缀运算符
例如如下程序:
程序清单:
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()方法,并将方法返回值赋值给变量。
(
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双目算术运算符
例如如下程序:
程序清单:
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的疯狂讲义 |
疯狂kotlin讲义连载之运算符和表达式——与Java相同的运算符
最新推荐文章于 2024-10-16 18:20:22 发布