Kotlin基本數據類型
kotlin的基本數值類型包括Byte,Short,Int,Long,Float,Double等。與java有差別的是字符不屬於數值類型,而是一個獨立的數據類型。
而內存大小則Byte 8位,Short 16位,Int 32位,Long 64位,Float 32位,Double 64位。與Java基本沒有差別。
字面常量
下面是所有類型的字面常量:
- 十進制:123
- 長整型以大寫的L結尾:123L
- 16進制以0x開頭:0x0F
- 2進制以0b開頭:0b00001011
- ***注意:kotlin不支持8進制
kotlin同時也支持傳統符號表示的浮點數值:
- Double默認寫法:123.5,123.5e10
- Float使用f或者F后綴:123.5f
可以使用下划線使數字常量更易讀:
val oneMillion = 1_000_000 val creditCarNumber = 1234_5678_9012_3456L val socialSecurityNumber = 999_99_9999L val hexBytes = 0xFF_EC_DE_5E val bytes = ob11010000_010100_11100
比較兩個數字
kotlin中沒有基礎數據類型,只有封裝的數字類型,你每定義的一個變量,kotlin幫你封裝了一個對象。這樣確保了不會出現空指針。數字類型也一樣。所有在比較兩個數字的時候,就有比較數據大小和比較兩個對象是否相同的區別了。
* === :表示比較對象地址。
*==:表示比較兩個值的大小。
類型轉換
由於不同的表示方式,較小類型並不是較大類型的子類型,較小的類型不能隱式的轉換為較大的類型。這意味着在不進行顯示轉換的情況我們不能把byte型值賦給一個int變量。
val b: Byte = 1 //ok ,字面值是靜態檢測的 val i : Int = b //錯誤 //正確做法 val i :Int = b.toInt()
由此引出的各種數據類型轉換方法。
toByte() : Byte
toShort():
toInt():
toLong():
toFloat():
toDouble():
toChar():
但是有些情況下也是可以使用自動類型轉換的,前提是可以根據上下文環境推斷出正確的數據類型而且數學操作符會做相應的重載。例如:
val 1 = 1L + 3 //Long + Int =》 Long
位操作符
對於Int和Long類型,還有一系列位操作符可以使用,分別是:
shl(bits) - 左移位(Java <<)
shr(bits) -右移位(Java >>)
ushr(bits) -無符號右移位(Java >>>)
and(bits) -與
or(bits) -或
xor(bits) -異或
inv() -反向
字符
和Java不同的是,kotlin 中Char不能和數字操作,Char必須是是單引號‘包含起來的,比如普通字符’0‘,’a'。
fun check(c : char) { if (c == 1) { //錯誤 類型不兼容 } }
字符字面值用單引號括起來:'1'.特殊字符可以用反斜杠轉義。
支持以下轉義序列:\t,\b,\n,\r,\',\",\\和\$。編碼其他字符要用Unicode轉義序列語法:"\uFF00"。
我們可以顯示把字符轉換位Int數字:
注意:倒數第二行不能少 - '0'.toInt() 否則打印 51 原因未知。
當需要可空引用時,像數字,字符會被裝箱。裝箱操作不會保留同一性。
布爾
布爾用Boolean類型表示,它有兩個值:true和false。
若需要可空引用會被裝箱。
內置的布爾運算有:
|| -短路邏輯或
&& - 短路邏輯與
! - 短路邏輯非
數組
數組用類Array實現,並且還有一個size屬性及get和set方法。
由於使用[]重載了get和set方法。所以我們可以通過下標很方便的獲取或者設置數組對應位置的值。
數組的創建兩種方式:一種是使用函數arrayOf();另外一種是使用工廠函數。如下所示我們分別是兩種方式創建了兩個數組:
注意:[] 運算符代表調用成員函數get()和set()。
注意:與Java不同的是,kotlin中數組是不型變的。(invariant)。
除此之外還有 ByteArray,ShortArray,IntArray,用來表示各個類型的數組,省去了裝箱操作,因此效率更高,其用法同Array一樣。
字符串
和Java一樣,String是不可變的。方括號[]語法可以很方便的獲取字符串中的某個字符,也可以通過for循環來遍歷:
kotlin支持三個引號''' '''括起來的字符串,支持多行字符串比如:
當然也可以通過.trimMargin()刪除多余的空白。
字符串模板
字符串可以包含模板表達式,即一些小段代碼,會求值並把結果合並到字符串中。模板表達式以美元符($)開頭,由一個簡單的名字構成:
或者用花括號擴起來的任意表達式:
原生字符串和轉義字符串內部都支持模板。如果你需要在原生字符串中表示字面值$字符(它不支持反斜杠轉義)。可以使用下列語法: