【Kotlin從入門到深坑】之基礎型別
簡介
本篇部落格主要是介紹Kotlin語法中的【基礎型別】相關的知識,幫助各位更快的掌握Kotlin,如果有疏漏或者錯誤,請在留言中指正,謝謝。 系列彙總地址
準備
在學習之前我們先有點基礎知識上的認識,如下:
Kotlin和java程式碼可以混合寫,也可以互調。
Kotlin中是不寫
;
的。Kotlin中使用關鍵詞val表示常量,var表示變數
Kotlin中宣告變數的模板
var a:Int =1 => var 變數名:型別 = 值
基本型別
對於java中我們都很清楚基本型別有 byte、short、int、long、double、float、boolean、char 等,對於Kotlin中當然也有與其對應的,不過它們更像是java中的包裝類 比如int->Integer ,Kotlin中是Int
下面是對應關係(首字母變大寫)
-
int->Int
-
double->Double
-
long->Long
-
double->Double
-
float->Float
-
boolean->Boolean
-
char->Char
對於Kotlin中所有東西都是物件,也就是說我們可以在任何變數上面呼叫屬性和成員變數。
數字
對於Kotlin數字的處理和java類似,但也略有不同,比如沒有隱式拓寬轉換(對於java中int型別的可以轉為long型別的),數字的表示上和java的類似,比如浮點值 12.8f,但Kotlin不支援8進位制數值
儲存原理
java平臺上(Kotlin可以編譯為javascript),數字預設是採用java的原生型別,也就是說Int是按照int儲存的。但如果我們要使用Int?(”?”表示可能為null,後續會講解)或者泛型,則數字會自動裝箱,也就是說Int按照Integer儲存。
需要注意的是數字裝箱不會保證同一性,但會保留相等性,舉個例子:
val a: Int = 10000 //原生型別儲存
print(a === a) // 地址相同,列印 'true'
val boxedA: Int? = a //自動裝箱
val anotherBoxedA: Int? = a //再次裝箱
print(boxedA === anotherBoxedA) // 地址不同 列印 'false'--不保證同一性
再看以下程式碼
val a: Int = 10000 //原生型別儲存
print(a == a) // 內容相同
val boxedA: Int? = a//自動裝箱
val anotherBoxedA: Int? = a//再次裝箱
print(boxedA == anotherBoxedA) //內容相同// Prints 'true'--相等性
此處簡單的說明一下”===”和”==” 的區別:
“===”表示的是否引用地址相同
“==” 表示內容是否相同,等同於equals(),比較其值是否相等
型別轉換
支援表示式形式的隱式轉換比如:
var a:Long =1L
var b:Int=1
var c=a+b //c是Long型的
但不支援
var a:Long =1L
var b:Int=a //編譯報錯
或者
var b:Int=1
var a:Long =b //編譯報錯
但每個數字型別支援如下的轉換,用於顯式拓寬數字,需要轉換的時候可以使用如下函式。
toByte(): Byte
toShort(): Short
toInt(): Int
toLong(): Long
toFloat(): Float
toDouble(): Double
toChar(): Char
字元
Kotlin中字元使用Char來表示,它們不能直接當做數字來處理(不同於java)。字元使用''
進行括起來,使用特殊字元可以使用轉義字元\
,支援這幾個轉義序列:\t、 \b、\n、\r、\'、\"、\\ 和 \$
。
布林值
Kotlin中使用Boolean來表示布林值,它可以儲存兩種型別的值true和false
。
支援的運算子如下:
- || – 短路邏輯或
- && – 短路邏輯與
- ! - 邏輯非
陣列
Kotlin中使用Array類來表示陣列,它定義了get
和set
函式(按照運算子過載,內部仍然使用[]來訪問)和size 屬性。
下面我們介紹一下如何建立陣列
使用
arrayOf
建立陣列:var array: Array<String> = arrayOf("1", "b")
使用
arrayOfNulls
建立陣列:var array3:Array<String?> = arrayOfNulls(5)//指定大小,並用null填充,此處宣告使用String?,表示此處內容可能為null
使用
Array
建立陣列:val asc = Array(5, { i -> (i * i).toString() })// 前面的5是指定大小,後面的i是對應的索引0-4,{} 內的是初始化方法}
Kotlin 也有無裝箱開銷的專門的類來表示原生型別陣列: ByteArray、 ShortArray、IntArray 等等。這些類和 Array 並沒有繼承關係,但是 它們有同樣的方法屬性集。它們也都有相應的工廠方法。
字串
Kotlin中字串使用String來表示,字串是不可變的,可以使用s[i]的形式訪問其中的字元,也可以遍歷字串,訪問其中的字元。
Kotlin中有兩種字串,轉義字串和原生字串(不能使用轉義字元),下面介紹一下:
- 轉義字串:這種類似於java的字串,
val a:String="test word \n"
原生字串:
// 上下各三個 """ 引號包裹需要顯示的內容 val a:String= """ 白雲黑土 宇宙洪荒 """ //此種字串會原樣輸出,保留此處的格式
字串模板
字串可以包含字串模板,就是一小段程式碼,它的作用就是把求值的結果合併到字串中,模板表示式使用$ 美元符號,下面舉例說明:
val a=10
val str="a的值是:$a"//輸出:a的內容是:10
還可以用於方法,比如:
val a="test"
val str="a的內容是:$a,長度是${a.length}" //輸出:a的內容是:test,長度是4
字串模板支援原生字串和轉義字串。
總結
至此已經學完了Kotlin的【基礎型別】相關的知識,多回顧多思考,繼續後續內容。