【Kotlin從入門到深坑】之基礎(chǔ)類型

簡(jiǎn)介

本篇博客主要是介紹Kotlin語(yǔ)法中的【基礎(chǔ)類型】相關(guān)的知識(shí),幫助各位更快的掌握Kotlin,如果有疏漏或者錯(cuò)誤,請(qǐng)?jiān)诹粞灾兄刚阂希x謝。 系列匯總地址


準(zhǔn)備

在學(xué)習(xí)之前我們先有點(diǎn)基礎(chǔ)知識(shí)上的認(rèn)識(shí)镜沽,如下:

  • Kotlin和java代碼可以混合寫敏晤,也可以互調(diào)。

  • Kotlin中是不寫;的淘邻。

  • Kotlin中使用關(guān)鍵詞val表示常量茵典,var表示變量

  • Kotlin中聲明變量的模板 var a:Int =1 => var 變量名:類型 = 值


基本類型

對(duì)于java中我們都很清楚基本類型有 byte、short宾舅、int统阿、long、double筹我、float扶平、boolean、char 等蔬蕊,對(duì)于Kotlin中當(dāng)然也有與其對(duì)應(yīng)的结澄,不過(guò)它們更像是java中的包裝類 比如int->Integer ,Kotlin中是Int
下面是對(duì)應(yīng)關(guān)系(首字母變大寫)

  • int->Int
  • double->Double
  • long->Long
  • double->Double
  • float->Float
  • boolean->Boolean
  • char->Char

對(duì)于Kotlin中所有東西都是對(duì)象,也就是說(shuō)我們可以在任何變量上面調(diào)用屬性和成員變量。


數(shù)字

對(duì)于Kotlin數(shù)字的處理和java類似麻献,但也略有不同们妥,比如沒(méi)有隱式拓寬轉(zhuǎn)換(對(duì)于java中int類型的可以轉(zhuǎn)為long類型的),數(shù)字的表示上和java的類似勉吻,比如浮點(diǎn)值 12.8f,但Kotlin不支持8進(jìn)制數(shù)值


存儲(chǔ)原理

java平臺(tái)上(Kotlin可以編譯為javascript),數(shù)字默認(rèn)是采用java的原生類型监婶,也就是說(shuō)Int是按照int存儲(chǔ)的。但如果我們要使用Int?("?"表示可能為null齿桃,后續(xù)會(huì)講解)或者泛型惑惶,則數(shù)字會(huì)自動(dòng)裝箱,也就是說(shuō)Int按照Integer存儲(chǔ)短纵。

需要注意的是數(shù)字裝箱不會(huì)保證同一性带污,但會(huì)保留相等性,舉個(gè)例子:

val a: Int = 10000 //原生類型存儲(chǔ)
print(a === a) // 地址相同香到,打印 'true' 
val boxedA: Int? = a //自動(dòng)裝箱
val anotherBoxedA: Int? = a //再次裝箱
print(boxedA === anotherBoxedA) // 地址不同 打印 'false'--不保證同一性

再看以下代碼

val a: Int = 10000 //原生類型存儲(chǔ)
print(a == a) // 內(nèi)容相同
val boxedA: Int? = a//自動(dòng)裝箱
val anotherBoxedA: Int? = a//再次裝箱
print(boxedA == anotherBoxedA) //內(nèi)容相同// Prints 'true'--相等性

此處簡(jiǎn)單的說(shuō)明一下"==="和"==" 的區(qū)別:

  • "==="表示的是否引用地址相同

  • "==" 表示內(nèi)容是否相同鱼冀,等同于equals(),比較其值是否相等


類型轉(zhuǎn)換

支持表達(dá)式形式的隱式轉(zhuǎn)換比如:

var a:Long =1L
var b:Int=1
var c=a+b //c是Long型的

但不支持

var a:Long =1L
var b:Int=a  //編譯報(bào)錯(cuò)

或者

var b:Int=1
var a:Long =b //編譯報(bào)錯(cuò)

但每個(gè)數(shù)字類型支持如下的轉(zhuǎn)換,用于顯式拓寬數(shù)字悠就,需要轉(zhuǎn)換的時(shí)候可以使用如下函數(shù)雷绢。

  • toByte(): Byte
  • toShort(): Short
  • toInt(): Int
  • toLong(): Long
  • toFloat(): Float
  • toDouble(): Double
  • toChar(): Char

字符

Kotlin中字符使用Char來(lái)表示,它們不能直接當(dāng)做數(shù)字來(lái)處理(不同于java)理卑。字符使用''進(jìn)行括起來(lái),使用特殊字符可以使用轉(zhuǎn)義字符\,支持這幾個(gè)轉(zhuǎn)義序列:\t蔽氨、 \b藐唠、\n、\r鹉究、\'宇立、\"、\\ 和 \$自赔。


布爾值

Kotlin中使用Boolean來(lái)表示布爾值妈嘹,它可以保存兩種類型的值true和false
支持的運(yùn)算符如下:

  • || – 短路邏輯或
  • && – 短路邏輯與
  • ! - 邏輯非

數(shù)組

Kotlin中使用Array類來(lái)表示數(shù)組绍妨,它定義了getset函數(shù)(按照運(yùn)算符重載润脸,內(nèi)部仍然使用[]來(lái)訪問(wèn))和size 屬性。
下面我們介紹一下如何創(chuàng)建數(shù)組

  • 使用arrayOf創(chuàng)建數(shù)組:var array: Array<String> = arrayOf("1", "b")

  • 使用arrayOfNulls創(chuàng)建數(shù)組:var array3:Array<String?> = arrayOfNulls(5)//指定大小他去,并用null填充毙驯,此處聲明使用String?,表示此處內(nèi)容可能為null

  • 使用Array創(chuàng)建數(shù)組:val asc = Array(5, { i -> (i * i).toString() })// 前面的5是指定大小,后面的i是對(duì)應(yīng)的索引0-4灾测,{} 內(nèi)的是初始化方法}

Kotlin 也有無(wú)裝箱開銷的專門的類來(lái)表示原生類型數(shù)組: ByteArray爆价、 ShortArray、IntArray 等等。這些類和 Array 并沒(méi)有繼承關(guān)系铭段,但是 它們有同樣的方法屬性集骤宣。它們也都有相應(yīng)的工廠方法。


字符串

Kotlin中字符串使用String來(lái)表示序愚,字符串是不可變的憔披,可以使用s[i]的形式訪問(wèn)其中的字符,也可以遍歷字符串展运,訪問(wèn)其中的字符活逆。
Kotlin中有兩種字符串,轉(zhuǎn)義字符串和原生字符串(不能使用轉(zhuǎn)義字符)拗胜,下面介紹一下:

  • 轉(zhuǎn)義字符串:這種類似于java的字符串蔗候,val a:String="test word \n"
  • 原生字符串:
 // 上下各三個(gè) """ 引號(hào)包裹需要顯示的內(nèi)容
   val a:String=
           """
           白云黑土
           宇宙洪荒
           """  //此種字符串會(huì)原樣輸出,保留此處的格式

字符串模板

字符串可以包含字符串模板埂软,就是一小段代碼锈遥,它的作用就是把求值的結(jié)果合并到字符串中,模板表達(dá)式使用$ 美元符號(hào)勘畔,下面舉例說(shuō)明:

val a=10
val str="a的值是:$a"http://輸出:a的內(nèi)容是:10

還可以用于方法所灸,比如:

val a="test"
val str="a的內(nèi)容是:$a,長(zhǎng)度是${a.length}"  //輸出:a的內(nèi)容是:test,長(zhǎng)度是4

字符串模板支持原生字符串和轉(zhuǎn)義字符串。


總結(jié)

至此已經(jīng)學(xué)完了Kotlin的【基礎(chǔ)類型】相關(guān)的知識(shí)炫七,多回顧多思考爬立,繼續(xù)后續(xù)內(nèi)容

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末万哪,一起剝皮案震驚了整個(gè)濱河市侠驯,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌奕巍,老刑警劉巖吟策,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異的止,居然都是意外死亡檩坚,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門诅福,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)匾委,“玉大人,你說(shuō)我怎么就攤上這事权谁∈L矗” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵旺芽,是天一觀的道長(zhǎng)沪猴。 經(jīng)常有香客問(wèn)我辐啄,道長(zhǎng),這世上最難降的妖魔是什么运嗜? 我笑而不...
    開封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任壶辜,我火速辦了婚禮,結(jié)果婚禮上担租,老公的妹妹穿的比我還像新娘砸民。我一直安慰自己,他們只是感情好奋救,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開白布岭参。 她就那樣靜靜地躺著,像睡著了一般尝艘。 火紅的嫁衣襯著肌膚如雪演侯。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天背亥,我揣著相機(jī)與錄音秒际,去河邊找鬼。 笑死狡汉,一個(gè)胖子當(dāng)著我的面吹牛娄徊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播盾戴,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼寄锐,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了尖啡?” 一聲冷哼從身側(cè)響起锐峭,我...
    開封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎可婶,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體援雇,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡矛渴,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了惫搏。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片具温。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖筐赔,靈堂內(nèi)的尸體忽然破棺而出铣猩,到底是詐尸還是另有隱情,我是刑警寧澤茴丰,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布达皿,位于F島的核電站天吓,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏峦椰。R本人自食惡果不足惜龄寞,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望汤功。 院中可真熱鬧物邑,春花似錦、人聲如沸滔金。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)餐茵。三九已至科阎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間钟病,已是汗流浹背萧恕。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留肠阱,地道東北人票唆。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像屹徘,于是被迫代替她去往敵國(guó)和親走趋。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

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