官方文檔: http://kotlinlang.org/docs/reference/basic-types.html
1.介紹
與java不同,Kotlin所有數(shù)據(jù)類型都是對象翩迈,因此可在任何變量上調(diào)用成員函數(shù)和屬性(字段)!
2.數(shù)字
Kotlin 處理數(shù)字在某種程度上接近 Java堤魁,但是并不完全相同返十。
例如,對于數(shù)字沒有隱式把范圍變寬轉(zhuǎn)換(如在 Java 中 int 可以隱式轉(zhuǎn)換為long)盲链,
另外有些情況的字面值略有不同。
Kotlin 內(nèi)置數(shù)字類型:
類型 位數(shù)
Double 64
Float 32
Long 64
Int 32
Short 16
Byte 8
注意在 Kotlin 中字符Char不能轉(zhuǎn)化為數(shù)字
3.數(shù)值字面常量
數(shù)值常量字面值表示:
十進制: 123
十六進制: 0x0F
二進制: 0b00001011
注意: 不支持八進制(而java以0開頭表示八進制 07)
Long 用大寫 L 標(biāo)記: 123L
Float 用 f 或 F 標(biāo)記: 123.5f
double: 123.5瓢剿、123.5e10
自 Kotlin 1.1 起悠轩,用下劃線使數(shù)字更易讀:
val oneMillion = 1_000_000
val creditCardNumber = 1234_5678_9012_3456L
val socialSecurityNumber = 999_99_9999L
val hexBytes = 0xFF_EC_DE_5E
val bytes = 0b11010010_01101001_10010100_10010010
4.數(shù)字自動裝箱-表示方式
Kotlin數(shù)字在虛擬機中是物理存儲為JVM原生類型,但如果是可null引用(有問號?)或者泛型對象,
那么kotlin數(shù)字就會自動裝箱(類似java包裝類,如int自動裝箱轉(zhuǎn)為Integer)
kotlin數(shù)字自動裝箱的實例:
val a: Int = 10000
val boxA: Int? = a //有問號? 會自動裝箱
val boxB: Int? = a //有問號? 會自動裝箱
kotlin三個等號===比較的是對象地址(引用),自動裝箱會生成新對象,兩個對象不同,輸出false
但是數(shù)值在-128和127之間時,自動裝箱會重用同一個對象(java緩存機制),輸出true
print(boxA === boxB) //輸出false,如果數(shù)值在-128和127之間,輸出true
kotlin兩個等號==比較的是對象數(shù)值,兩個對象數(shù)值相同,輸出true
print(boxA == boxB) //輸出true
5.顯式轉(zhuǎn)換
范圍較小數(shù)字類型不能隱式轉(zhuǎn)換為范圍較大類型火架。
val b: Byte = 1 // 正確, 字面值是靜態(tài)檢測的
val i: Int = b // 錯誤: 隱式擴寬
val i: Int = b.toInt() // 正確: 顯式擴寬
每個數(shù)字類型支持如下類型轉(zhuǎn)換:
toByte(): Byte
toShort(): Short
toInt(): Int
toLong(): Long
toFloat(): Float
toDouble(): Double
toChar(): Char
缺少隱式擴寬轉(zhuǎn)換是很少引人注意的忙菠,因為類型是從上下文推斷出來的,而算術(shù)運算會有重載做適當(dāng)擴寬轉(zhuǎn)換骡男,例如:
val l = 1L + 3 // Long + Int => Long
6.位運算
Kotlin支持?jǐn)?shù)字運算的標(biāo)準(zhǔn)集傍睹,運算被定義為相應(yīng)的類成員(但編譯器會將函數(shù)調(diào)用優(yōu)化為相應(yīng)的指令)
對于按位運算,沒有特殊字符來表示吮炕,而只可用中綴方式調(diào)用函數(shù)访得,例如:
val x = (1 shl 2) and 0x000FF000
以下是完整位運算列表(只用于 Int 和 Long):
shl(bits) – 有符號左移 (Java 的 <<)
shr(bits) – 有符號右移 (Java 的 >>)
ushr(bits) – 無符號右移 (Java 的 >>>)
and(bits) – 位與
or(bits) – 位或
xor(bits) – 位異或
inv() – 位非
7.字符
字符用 Char 類型表示,不能直接當(dāng)作數(shù)字
fun check(c: Char) {
if (c == 1) { // 錯誤:類型不兼容
// ……
}
}
字符字面值用單引號括起來: '1'
特殊字符可以用反斜杠轉(zhuǎn)義: \t鳄炉、 \b搜骡、\n、\r记靡、\'、\"榕订、\\ 和 \$蜕便。
編碼其他字符用 Unicode 轉(zhuǎn)義序列語法:'\uFF00'。
我們可以顯式把字符轉(zhuǎn)換為 Int 數(shù)字
fun decimalDigitValue(c: Char): Int {
if (c !in '0'..'9')
throw IllegalArgumentException("Out of range")
return c.toInt() - '0'.toInt() // 顯式轉(zhuǎn)換為數(shù)字
}
當(dāng)需要可null引用時两嘴,像數(shù)字一樣,字符也會被裝箱趣些。
裝箱操作不會保留同一性(同一對象)贰您。
8.布爾
布爾用 Boolean 類型表示,它有兩個值:true 和 false锦亦。
若需要可空引用布爾會被裝箱杠园。
9.數(shù)組
數(shù)組在 Kotlin 中使用 Array 類來表示,它定義了 get 和 set 函數(shù)(按照運算符重載約定轉(zhuǎn)變?yōu)?[])和 size 屬性
使用庫函數(shù) arrayOf() 來創(chuàng)建一個數(shù)組并傳遞元素值
arrayOf(1, 2, 3) 創(chuàng)建了 array [1, 2, 3]
或 arrayOfNulls() 創(chuàng)建一個指定大小的null數(shù)組
使用接受數(shù)組大小和一個函數(shù)參數(shù)的工廠函數(shù)抛蚁,用作參數(shù)的函數(shù)能夠返回每個元素初始值:
// 創(chuàng)建一個 Array<String> 初始化為 ["0", "1", "4", "9", "16"]
val asc = Array(5, { i -> (i * i).toString() })
注意: 與 Java 不同的是瞧甩,Kotlin 中數(shù)組是不型變的(invariant)。
這意味著 Kotlin 不讓 Array<String> 賦值給 Array<Any>尘应,以防止可能的運行時失敽鸹ⅰ(但是可用 Array<out Any>)
還有無裝箱開銷的類表示原生類型數(shù)組: ByteArray、 ShortArray思灰、IntArray 等等,這些類和 Array 并沒有繼承關(guān)系歹颓,但是有同樣方法屬性油湖,相應(yīng)的工廠方法
val x: IntArray = intArrayOf(1, 2, 3)
x[0] = x[1] + x[2]
10.字符串
字符串用 String 類型表示,字符串是不可變的撤奸;
字符串元素可通過索引操作 s[i]
可用 for 循環(huán)迭代字符串:
for (c in str) {
println(c)
}
1.字符串字面值
Kotlin 有兩種類型的字符串字面值:
一是轉(zhuǎn)義字符串 可以有轉(zhuǎn)義字符,二是原始字符串 可以包含換行和任意文本
轉(zhuǎn)義字符串 很像 Java 字符串:
val s = "Hello, world!\n"
轉(zhuǎn)義采用傳統(tǒng)的反斜杠方式
原始字符串 使用三個引號 """ 括起來矢棚,
內(nèi)部沒有轉(zhuǎn)義并且可以包含換行和任何其他字符:
val text = """
for (c in "foo")
print(c)
"""
你可以通過 trimMargin() 函數(shù)去除前導(dǎo)空格:
val text = """
|Tell me and I forget.
|Teach me and I remember.
|Involve me and I learn.
|(Benjamin Franklin)
""".trimMargin()
默認(rèn) | 用作邊界前綴府喳,可用其他字符作為參數(shù)傳入 trimMargin(">")
2.字符串模板
字符串可以包含模板表達式 ,即一些小段代碼兜粘,會求值并把結(jié)果合并到字符串中舱沧。
模板表達式以美元符 $ 開頭
由一個簡單變量構(gòu)成:
val i = 10
val s = "i = $i" // 求值結(jié)果為 "i = 10"
用花括號{任意表達式}:
val s = "abc"
val str = "$s.length is ${s.length}" // 求值結(jié)果為 "abc.length is 3"
原始字符串和轉(zhuǎn)義字符串內(nèi)都支持模板偶洋。
如果你需要在原生字符串中表示字面值 $ 字符(不支持反斜杠轉(zhuǎn)義):
val price = """
${'$'}9.99
"""
簡書: http://www.reibang.com/p/084dec2793dc
CSDN博客: http://blog.csdn.net/qq_32115439/article/details/73196341
GitHub博客: http://lioil.win/2017/06/13/Kotlin-basic-types.html
Coding博客: http://c.lioil.win/2017/06/13/Kotlin-basic-types.html