運(yùn)算
shl(bits) – 有符號(hào)左移 (Java 的 <<)
shr(bits) – 有符號(hào)右移 (Java 的 >>)
ushr(bits) – 無符號(hào)右移 (Java 的 >>>)
and(bits) – 位與
or(bits) – 位或
xor(bits) – 位異或
inv() – 位非
字符
字符字面值用單引號(hào)括起來: '1'罩驻。 特殊字符可以用反斜杠轉(zhuǎn)義。 支持這幾個(gè)轉(zhuǎn)義序列:\t、 \b、\n、\r启泣、'、"、\ 和 $纬黎。 編碼其他字符要用 Unicode 轉(zhuǎn)義序列語(yǔ)法:'\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ù)字
}
布爾
布爾用 Boolean 類型表示劫窒,它有兩個(gè)值:true 和 false本今。
若需要可空引用布爾會(huì)被裝箱。
內(nèi)置的布爾運(yùn)算有:
|| – 短路邏輯或
&& – 短路邏輯與
! - 邏輯非
數(shù)組
數(shù)組在 Kotlin 中使用 Array 類來表示主巍,它定義了 get 和 set 函數(shù)(按照運(yùn)算符重載約定這會(huì)轉(zhuǎn)變?yōu)?[])和 size 屬性诈泼,以及一些其他有用的成員函數(shù):
class Array<T> private constructor() {
val size: Int
operator fun get(index: Int): T
operator fun set(index: Int, value: T): Unit
operator fun iterator(): Iterator<T>
// ……
}
可以使用庫(kù)函數(shù) arrayOf() 來創(chuàng)建一個(gè)數(shù)組并傳遞元素值給它,這樣 arrayOf(1, 2, 3) 創(chuàng)建了 array [1, 2, 3]煤禽。 或者铐达,庫(kù)函數(shù) arrayOfNulls() 可以用于創(chuàng)建一個(gè)指定大小、元素都為空的數(shù)組檬果。
另一個(gè)選項(xiàng)是用接受數(shù)組大小和一個(gè)函數(shù)參數(shù)的工廠函數(shù)瓮孙,用作參數(shù)的函數(shù)能夠返回 給定索引的每個(gè)元素初始值:
// 創(chuàng)建一個(gè) Array<String> 初始化為 ["0", "1", "4", "9", "16"]
val asc = Array(5, { i -> (i * i).toString() })
如上所述,[] 運(yùn)算符代表調(diào)用成員函數(shù) get() 和 set()选脊。
注意: 與 Java 不同的是杭抠,Kotlin 中數(shù)組是不型變的(invariant)。這意味著 Kotlin 不讓我們把 Array<String>
賦值給 Array<Any>
恳啥,以防止可能的運(yùn)行時(shí)失斊印(但是你可以使用 Array<out Any>
, 參見類型投影)。
Kotlin 也有無裝箱開銷的專門的類來表示原生類型數(shù)組: ByteArray
钝的、 ShortArray
翁垂、IntArray
等等。這些類和 Array
并沒有繼承關(guān)系硝桩,但是 它們有同樣的方法屬性集沿猜。它們也都有相應(yīng)的工廠方法:
val x: IntArray = intArrayOf(1, 2, 3)
x[0] = x[1] + x[2]