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…
|