數(shù)據(jù)類型
基本類型和Java基本保持一致赋除,只是Kotlin中是大寫首字母
Char
Byte
Short
Int
Long
Float
Double
Boolean
Kotlin不支持自動擴(kuò)展數(shù)字范圍韭脊,Java中int類型可自動擴(kuò)展成long什乙,但是Kotlin中必須要顯式的指定類型淋硝。
val intValue = 10
val longValue = intValue.toLong()
其他類似的還有toDouble toShort toByte等方法
上面第一行代碼中沒有顯示的指定數(shù)據(jù)類型制恍,Kotlin可以根據(jù)指定的值推斷出類型父能,由此可知上面的intValue的類型是Int。
元組
元組只有二元(Pair)和三元(Triple)净神,因此也只能存放2個值和3個值
val pair = Pair("one", "two")
print(pair.first + " - " + pair.second)
val triple = Triple("one", "two", "third")
print(triple.first + " - " + triple.second + " - " + triple.third)
可空類型
Java中的最常見的一個異常就是NullPointerException何吝,Kotlin的可空類型完美的避免了每次繁瑣的判空處理【槲ǎ可空類型表示它的值可以聲明為null爱榕,用類型后面加一個?表示,如:
val string: String? = null // ①
val string2: String = null // ②
上面①的聲明是正確的坡慌,但是②的聲明是錯誤的黔酥,IDE會提示 Null can not be a value of a non-null type String
,說明沒有帶?的變量是不能聲明為null的洪橘。
聲明3個變量分別是 s1,s2,s3跪者,將3個變量轉(zhuǎn)換成大寫
val s1: String = "Kotlin"
val s2: String? = null
val s3: String
println(s1.toUpperCase())
println(s2?.toUpperCase())
println(s3.toUpperCase()) // IDE報錯Variable 's3' must be initialized
KOTLIN
null
聲明s1并賦值為小寫字符串kotlin,聲明s2但是初始化為null熄求,聲明s3不初始化渣玲。
s1可將 kotlin 轉(zhuǎn)成 KOTLIN;s2初始化為null弟晚,直接輸出了null忘衍,而沒有像Java那樣報NPE異常;s3聲明不報錯卿城,但是s3.toUpperCase()的時候IDE編譯不通過淑履。這說明:
- 聲明可以不立馬初始化
- String?是空類型安全的,即使是初始化為null藻雪,依舊不報錯秘噪,而是返回null
- 對于未初始化的變量不能使用
相等操作符
== 和 ===
判斷引用是否相等用 ===
判斷值是否相等用 ==
val s1 = "Kotlin"
val s2 = "Kotlin"
println(s1 == s2)
println(s1 === s2)
>> true
>> true
因為s1和s2的字符串在常量池中指向的是同一個引用,所以引用和值都返回true
val f1 = File("sdcard/")
val f2 = File("sdcard/")
println(f1 == f2)
println(f1 === f2)
>> true
>> false
f1和f2雖然是相同的路徑勉耀,但是是不同的對象指煎,所以指向了不同的引用,因此 === 返回false便斥,路徑值相同至壤,因此 == 返回true。
區(qū)間
區(qū)間是一個有開始值和結(jié)束值的范圍枢纠。創(chuàng)建一個區(qū)間用 .. 操作符
val range = 1..100
range的范圍等同于 1 <= range <= 100
遍歷區(qū)間
for (num in range) {
println(num)
}
>> 1
>> 2
...
>> 100
區(qū)間反轉(zhuǎn)
val reversedRange = range.reversed()
for (num in reversedRange) {
println(num)
}
>> 100
>> 99
...
>> 1
步長
默認(rèn)的步長是1像街,也可以設(shè)置步長,用step(Int)
val range = 1..100
for (num in range.step(3)) {
println(num)
}
>> 1
>> 4
...
>> 100