數(shù)值類型
Q:Java的基本數(shù)據(jù)類型
Kotlin 處理數(shù)值的方法和 java 很相似,但不是完全一樣。比如,不存在隱式轉(zhuǎn)換數(shù)值的精度,并且在字面上有一些小小的不同
Kotlin 提供了如下內(nèi)建數(shù)值類型
| 類型 | 位寬 |
|---|---|
| Double | 64 |
| Float | 32 |
| Long | 64 |
| Int | 32 |
| Short | 16 |
| Byte | 8 |
val b:Byte = 1
val s:Short = 1
數(shù)據(jù)類型轉(zhuǎn)化
由于不同的表示方式,較小類型并不是較大類型的子類型,較小的類型不能隱式轉(zhuǎn)換為較大的類型。 這意味著在不進(jìn)行顯式轉(zhuǎn)換的情況下我們不能把 Byte 型值賦給一個 Int 變量。
val b: Byte = 1 // OK, 字面值是靜態(tài)檢測的
val i: Int = b // 錯誤
val i:Int = b.toInt()//ok
每種數(shù)據(jù)類型都有下面的這些方法,可以轉(zhuǎn)化為其它的類型:
toByte(): Byte
toShort(): Short
toInt(): Int
toLong(): Long
toFloat(): Float
toDouble(): Double
toChar(): Char
自動類型轉(zhuǎn)化
val sum = 1f + 1 // Long + Int = Long
位操作符
shl(bits) – 左移位 (Java’s <<)
shr(bits) – 右移位 (Java’s >>)
ushr(bits) – 無符號右移位 (Java’s >>>)
and(bits) – 與
or(bits) – 或
xor(bits) – 異或
inv() – 反向
字符類型
字符類型用 Char 表示。不能直接當(dāng)做數(shù)值來使用
和 Java 不一樣,Kotlin 中的 Char 不能直接和數(shù)字操作,Char 必需是單引號 ' 包含起來的。比如普通字符 '0','a'。
fun check(c: Char) {
if (c == 1) { // 錯誤:類型不兼容
// ……
}
}
字符字面值用單引號括起來: '1'。 特殊字符可以用反斜杠轉(zhuǎn)義。 支持這幾個轉(zhuǎn)義序列:\t、 \b、\n、\r、'、"、\ 和 $。 編碼其他字符要用 Unicode 轉(zhuǎn)義序列語法:'\uFF00'。
布爾類型
布爾用 Boolean 類型表示,它有兩個值:true 和 false。
若需要可空引用布爾會被裝箱。
內(nèi)置的布爾運(yùn)算有:
|| – 短路邏輯或
&& – 短路邏輯與
! - 邏輯非
數(shù)組類型
數(shù)組在 Kotlin 中由 Array 類表示,有 get 和 set (通過運(yùn)算符重載為[] )方法,和 size 屬性,以及一些常用的函數(shù):
//[1,2,3]
val a = arrayOf(1, 2, 3)
//[0,2,4]
val b = Array(3, { i -> (i * 2) })
注意: 與 Java 不同的是,Kotlin 中數(shù)組是不協(xié)變的(invariant)。
除了類Array,還有ByteArray, ShortArray, IntArray,用來表示各個類型的數(shù)組,省去了裝箱操作,因此效率更高,其用法同Array一樣:
val arr = intArrayOf(1,2,3)
字符串類型
字符串是由 String 表示的。字符串是不變的。字符串的元素可以通過索引操作讀取: s[i]
for (c in str) {
println(c)
}
字符串字面值
1.Kotlin 有兩種類型的字符串字面值:一種是可以帶轉(zhuǎn)義符的,一種是可以包含新行以及任意文本的。帶轉(zhuǎn)義符的 string 很像 java 的 string
val s = "Hello World!\n"
2.整行String 是由三個引號包裹的("""),不可以包含轉(zhuǎn)義符但可 以包含其它字符
val text = """
for (c in "foo")
print(c)
"""
val text = """
|Tell me and I forget.
|Teach me and I remember.
|Involve me and I learn.
|(Benjamin Franklin)
""".trimMargin()
默認(rèn)采用|標(biāo)注起始前綴,也可以傳遞其它的字符做起始前綴,比如trimMargin(">")
$ 字符串模板
字符串可以包含模板表達(dá)式,即可求值的代碼片段,并將其結(jié)果連接到字符串中。模板表達(dá)式由 $ 開始并包含另一個簡單的名稱:
val i = 10
val s = "i = $i" // 求值為 "i = 10"
val s = "abc"
val str = "$s.length is ${s.length}" // 結(jié)果為 "abc.length is 3"
val price = """
${'$'}9.99
"""