Kotlin 基本數(shù)據(jù)

數(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
"""
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容