簡(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ù)組绍妨,它定義了get
和set
函數(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)容。