在 Kotlin 中,所有東西都是對象,在這個意義上講我們可以在任何變量上調用成員函數與屬性。
Kotlin 中使用的基本類型:數字、字符、布爾值、數組與字符串。
數字
整數
類型 大小(比特數)
Byte 8
Short 16
Int 32
Long 64
所有以未超出 Int 最大值的整型值初始化的變量都會推斷爲 Int 類型。
如果初始值超過了其最大值,那麼推斷爲 Long 類型。
浮點數
Kotlin 提供了 Float 與 Double 類型
類型 大小(比特數)
Float 32
Double 64
對於以小數初始化的變量,編譯器會推斷爲 Double 類型。
如需將一個值顯式指定爲 Float 類型,添加 f 或 F 後綴
數值常量字面值有以下幾種:
十進制: 123
十六進制: 0x0F
二進制: 0b00001011
Long 類型用大寫 L 標記: 123L
不支持八進制寫法
在Java平臺數字是物理存儲爲 JVM 的原生類型,除非我們需要一個可空的引用(如 Int?)或泛型。 後者情況下會把數字裝箱。
== 和 === 區別
==比較數值 ===比較地址值
val a : Int = 9999
val b : Int? = a
val c : Int? = a
println(b == c)//true
println(b === c)//false
a是數值, b、c是對象
val a : Int = 9999
val b : Int = a
val c : Int = a
println(b == c)//true
println(b === c)//true
a, b, c都是數值
val a : Int? = 9999
val b : Int? = a
val c : Int? = a
println(b == c)//true
println(b === c)//true
a, b, c都是同一個對象
val a : Int = 9999 這樣的定義代表a是一個數值,不是對象。
val a : Int? = 9999 這樣的定義代表a是一個對象,對數字進行了裝箱。
顯示轉換
每個數字類型支持如下的轉換:
toByte(): Byte
toShort(): Short
toInt(): Int
toLong(): Long
toFloat(): Float
toDouble(): Double
toChar(): Char
運算
完整的位運算列表(只用於 Int 與 Long):
shl(bits) – 有符號左移
shr(bits) – 有符號右移
ushr(bits) – 無符號右移
and(bits) – 位與
or(bits) – 位或
xor(bits) – 位異或
inv() – 位非
字符
字符用 Char 類型表示。它們不能直接當作數字
var char = 'a'
布爾值
布爾用 Boolean 類型表示,它有兩個值:true 與 false。
若需要可空引用布爾會被裝箱。
var flag :Boolean? = false
內置的布爾運算有:
|| – 短路邏輯或
&& – 短路邏輯與
! - 邏輯非
數組
數組在 Kotlin 中使用 Array 類來表示,它定義了get與set函數(按照運算符重載約定這會轉變爲[])以及 size 屬性。
可以使用庫函數 arrayOf() 來創建一個數組並傳遞元素值給它,這樣 arrayOf(1, 2, 3) 創建了 array [1, 2, 3]。
或者,庫函數 arrayOfNulls() 可以用於創建一個指定大小的、所有元素都爲空的數組。
val names = arrayOfNulls<String>(5)
names.set(0,"楊過")
names.set(1,"小龍女")
names.set(2,"郭靖")
names.set(3,"郭芙")
names.set(4,"黃蓉")
names[1] = "天外飛仙"
names.forEach {
println(it)
}
字符串
字符串用 String 類型表示。字符串是不可變的。字符串的元素——字符可以使用索引運算符訪問: s[i]。
可以用 for 循環迭代字符串:
var str = "baotazhenheyao"
for (a in str){
println(a)
}
字符串字面值可以包含模板表達式 ,即一些小段代碼,會求值並把結果合併到字符串中。
模板表達式以美元符($)開頭,由一個簡單的名字構成:
val age = 100
println("age = $age") // 輸出“age = 100”
var name = "歐陽鋒"
println("$name.length 爲 ${name.length}") //輸出 歐陽鋒.length 爲 3
字面上可以寫明具體的類型。這個不是必須寫明的。
我們可以讓編譯器自己去推斷出具體的類型。
val a = 100 // Int
val b = 0x0f // 一個十六進制的Int類型
val c = 31L // Long
val d = 3.5 // Double
val f = 3.8F // Float
val g = false //Boolean