Kotlin:基本類型都是對象沃饶,原生類型將成為回憶

在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ù)字、字符會被裝箱颖系。裝箱不會保留同一性嗅剖;

三 、布爾值


  1. 布爾值用Boolean類型表示嘁扼,它有兩個值:true和false信粮;
  2. 若需要可空引用布爾值會被裝箱
  3. 內(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ù)博文<碴(甭客氣搂誉!盡情的掃描或者長按!)

1024工場服務(wù)號

2.加入“Kotlin開發(fā)”QQ討論群静檬,一起學習一起Hi勒葱。(甭客氣!盡情的掃描或者長按0褪痢)
Kotlin開發(fā)群

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市死遭,隨后出現(xiàn)的幾起案子广恢,更是在濱河造成了極大的恐慌,老刑警劉巖呀潭,帶你破解...
    沈念sama閱讀 222,627評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件钉迷,死亡現(xiàn)場離奇詭異,居然都是意外死亡钠署,警方通過查閱死者的電腦和手機糠聪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谐鼎,“玉大人舰蟆,你說我怎么就攤上這事±旯鳎” “怎么了身害?”我有些...
    開封第一講書人閱讀 169,346評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長草戈。 經(jīng)常有香客問我塌鸯,道長,這世上最難降的妖魔是什么唐片? 我笑而不...
    開封第一講書人閱讀 60,097評論 1 300
  • 正文 為了忘掉前任丙猬,我火速辦了婚禮,結(jié)果婚禮上费韭,老公的妹妹穿的比我還像新娘茧球。我一直安慰自己,他們只是感情好星持,可當我...
    茶點故事閱讀 69,100評論 6 398
  • 文/花漫 我一把揭開白布袜腥。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪羹令。 梳的紋絲不亂的頭發(fā)上鲤屡,一...
    開封第一講書人閱讀 52,696評論 1 312
  • 那天,我揣著相機與錄音福侈,去河邊找鬼酒来。 笑死,一個胖子當著我的面吹牛肪凛,可吹牛的內(nèi)容都是我干的堰汉。 我是一名探鬼主播,決...
    沈念sama閱讀 41,165評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼伟墙,長吁一口氣:“原來是場噩夢啊……” “哼翘鸭!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起戳葵,我...
    開封第一講書人閱讀 40,108評論 0 277
  • 序言:老撾萬榮一對情侶失蹤就乓,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后拱烁,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體生蚁,經(jīng)...
    沈念sama閱讀 46,646評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,709評論 3 342
  • 正文 我和宋清朗相戀三年戏自,在試婚紗的時候發(fā)現(xiàn)自己被綠了邦投。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,861評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡擅笔,死狀恐怖志衣,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情猛们,我是刑警寧澤蠢涝,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站阅懦,受9級特大地震影響和二,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜耳胎,卻給世界環(huán)境...
    茶點故事閱讀 42,196評論 3 336
  • 文/蒙蒙 一惯吕、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧怕午,春花似錦废登、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春羽戒,著一層夾襖步出監(jiān)牢的瞬間缤沦,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評論 1 274
  • 我被黑心中介騙來泰國打工易稠, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留缸废,地道東北人。 一個月前我還...
    沈念sama閱讀 49,287評論 3 379
  • 正文 我出身青樓驶社,卻偏偏與公主長得像企量,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子亡电,可洞房花燭夜當晚...
    茶點故事閱讀 45,860評論 2 361

推薦閱讀更多精彩內(nèi)容