在Kotlin中,所有東西都是對象轻黑,我們可以在任何變量(如基本類型:數(shù)字糊肤、字符、布爾苔悦、數(shù)組與字符串等)上調(diào)用成員函數(shù)和屬性轩褐。
一、數(shù)字
1. 內(nèi)置類型種類
類型 | 比特寬度 |
---|---|
Double | 64 |
Float | 32 |
Long | 64 |
Int | 32 |
Short | 16 |
Byte | 8 |
Kotlin提供了如下內(nèi)置類型來表示數(shù)據(jù)(和Java很近)玖详;
類型 | 比特寬度 |
---|---|
Double | 64 |
Float | 32 |
Long | 64 |
Int | 32 |
Short | 16 |
Byte | 8 |
Java對比:在Kotlin中把介,字符不是數(shù)字;
2. 字面常量的表示
整數(shù)字面值有如下幾種:
- 十進制:123蟋座,Long類型使用大寫L標記:123L拗踢;
- 十六進制:0x0F;
- 二進制:0b00001011向臀;
注意:不支持八進制巢墅;
浮點數(shù)常規(guī)表示如下:
- 默認double:123.5、123.5e10;
- Float用f或者F標記:123.5f;
使用下劃線使數(shù)字常量更易閱讀风秤;
//如果數(shù)字位數(shù)暂题,信用號鄙早,進制數(shù)據(jù)分隔易于閱讀
val oneMillion = 1_000_000
val creditCardNumber = 1234_5678_9012_3456L
val hexBytes = 0xFF_EC_DE_5E
val bytes = 0b11010010_01101001_10010100_10010010
3. 可空引用或泛型才數(shù)字裝箱
Kotlin運行在Java平臺,數(shù)字是物理存儲為JVM的原生類型, 除非需要可空的引用(如Int?)或泛型,才會把數(shù)字裝箱会喝;
數(shù)字裝箱不保留同一性,它保留了相等性玩郊;
val a: Int = 10000
//a分別裝箱為boxedA何anotherBoxedA
val boxedA: Int? = a
val anotherBoxedA: Int? = a
//輸出false肢执,boxedA和anotherBoxedA不是一個對象
print(boxedA === anotherBoxedA)
//輸出trud,但是兩個對象的值相等
print(boxedA == anotherBoxedA)
4. 不支持隱士轉(zhuǎn)換只能顯示轉(zhuǎn)換
由于不同的表示方式译红,較小的類型不是較大類型的子類型预茄。因此較小的類型不能隱士轉(zhuǎn)換成較大類型;
可以顯示轉(zhuǎn)換來拓寬數(shù)字侦厚,每個數(shù)字類型都支持如下方法:
toByte(): Byte
toShort(): Short
toInt(): Int
toLong(): Long
toFloat(): Float
toDouble(): Double
toChar(): Char
缺乏隱式轉(zhuǎn)換影響并不大耻陕,類型會從上下文推斷昵慌,算術(shù)運算會重載做適當轉(zhuǎn)換;
// 字面值是靜態(tài)檢測為Byte類型
val b: Byte = 1
// 錯誤淮蜈,b為Byte類型,不能隱士轉(zhuǎn)換層較大的Int類型
val i: Int = b
// 正確已卷,通過toInt顯式拓寬為Int梧田;
val i: Int = b.toInt()
// Long + Int 為 Long
val l = 1L + 3
5. 運算定義成類成員
Kotlin支持數(shù)字運算標準集,運算被定義成相應(yīng)的類成員侧蘸;
對于位運算裁眯,沒有特殊字符表示,只可用中綴方式調(diào)用命名函數(shù)讳癌。完整位運算列表(只用于Int和Long)如下:
shl(bits):有符號左移穿稳,如Java中<<
shr(bits):有符號右移動,如Java中>>
ushr(bits):無符號右移晌坤,如Java的>>>
and(bits):位與
or(bits):位或
xor(bits):位異或
inv():位非
val x = (1 shl 2) and 0x000FF000
二逢艘、字符
1. 字符的表示
字符使用Char表示,它們不能直接當作數(shù)字骤菠;
fun check(c: Char) {
//字符不能當做數(shù)字它改;
if (c == 1) {
// ……
}
}
2. 字符的轉(zhuǎn)義
字符字面值用單引號括號起來:'1';
特殊字符使用反斜杠轉(zhuǎn)義商乎,如:\t央拖、\b、\n鹉戚、\r鲜戒、'、"抹凳、\和$等遏餐;
編碼字符使用Unicode轉(zhuǎn)義序列語法:'\uFF00';
3. 字符可顯示轉(zhuǎn)換
可以顯示把字符轉(zhuǎn)換為Int數(shù)字却桶;
fun decimalDigitValue(c: Char): Int {
if (c !in '0'..'9')
throw IllegalArgumentException("Out of range")
// 顯式轉(zhuǎn)換為數(shù)字
return c.toInt() - '0'.toInt()
}
當需要可空引用時境输,像數(shù)字、字符會被裝箱颖系。裝箱不會保留同一性嗅剖;
三 、布爾值
- 布爾值用Boolean類型表示嘁扼,它有兩個值:true和false信粮;
- 若需要可空引用布爾值會被裝箱;
- 內(nèi)置布爾值運算有:||-短路邏輯或趁啸、&&-短路邏輯與和强缘!-邏輯非督惰;
三、數(shù)組
1. 數(shù)組的表示
數(shù)組在Kotlin中使用Array類來表示旅掂;
2.數(shù)組的函數(shù)
定義了get和set函數(shù)(按照運算符重載約定會轉(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>
// ……
}
3. 數(shù)組的創(chuàng)建
數(shù)組使用庫函數(shù)arrayOf()來創(chuàng)建數(shù)組商虐,并傳遞元素值給它觉阅;
或者使用arrayOfNulls()可以創(chuàng)建指定大小,元素都為空的數(shù)組秘车;
用接受數(shù)組大小和一個函數(shù)參數(shù)的工廠函數(shù)用作參數(shù)典勇,函數(shù)返回給定索引的每個元素初始化值;
var array= arrayOf(1, 2, 3)
var nullArray = arrayOfNulls<Int>(5)
//創(chuàng)建一個 Array<String> 初始化為 ["0", "1", "4", "9", "16"]
val asc = Array(5, { i -> (i * *).toString() })
Java對比: Kotlin中數(shù)組是不型變的叮趴,意味著Kotlin不讓我們把Array<String>賦值給Array<Any>割笙,防止可能運行時失敗眯亦;
4. 原生類型數(shù)組
Kotlin有無裝箱開銷的專門類來表示原生類型數(shù)組:ByteArray伤溉、ShortArray、IntArray等妻率;
它們和Array沒有繼承關(guān)系谈火,有同樣的方法屬性集,有相應(yīng)的工廠方法舌涨;
val x: IntArray = intArrayOf(1, 2, 3)
x[0] = x[1] + x[2]
四糯耍、字符串
1. 字符串的表示
字符串用String類型表示,是不可變的囊嘉;
字符串的元素—字符可以使用索引運算符訪問:s[i]温技,可以用for循環(huán)迭代字符串;
for (c in str) {
println(c)
}
原生字符串使用三個引號(""")分界符號括起來扭粱,內(nèi)部沒有轉(zhuǎn)義并且可以包含換行和任何其他字符舵鳞;
val text = """
//內(nèi)部不需要使用轉(zhuǎn)義字符\"
for (c in "foo")
print(c)
"""
2. 字符串字面值
Kotlin有兩種類型字符串字面值:轉(zhuǎn)義字符串可以有轉(zhuǎn)義字符,原生字符串可以包含換行和任意文本琢蛤;
val s = "Hello, world!\n"
3. 字符串模板
字符串可以包含模板表達式蜓堕,即一小段代碼,會求值并把結(jié)果合并到字符串中博其;
模板表達式以美元符號($)開頭套才,由一個簡單的名字構(gòu)成;
val i = 10
// 求值結(jié)果為 "i = 10"
val s = "i = $i"
或者使用花括號括起來任意表達式慕淡;
val s = "abc"
// 求值結(jié)果為 "abc.length is 3"
val str = "$s.length is ${s.length}"
原生字符串和轉(zhuǎn)義字符串內(nèi)部都支持模板背伴,如果你需要在原生字符串中標識字面值$字符(它不支持反斜杠),可用如下語法:
val price = """
${'$'}9.99
"""
1.新技術(shù),新未來傻寂!盡在1024工場息尺。時刻關(guān)注最前沿技術(shù)資訊,發(fā)布最棒技術(shù)博文<碴(甭客氣搂誉!盡情的掃描或者長按!)
2.加入“Kotlin開發(fā)”QQ討論群静檬,一起學習一起Hi勒葱。(甭客氣!盡情的掃描或者長按0褪痢)