Kotlin 基礎 - 數據類型

1、Boolean 類型

Boolean 值有兩個值,分別爲 truefalse。多數狀況下,Kotlin 中的 Boolean 至關於 Java 中的基本類型 boolean,只有在必要的狀況下才會裝箱成爲 Java 中的裝箱類型 Boolean。這一切都是交由編譯器來完成,咱們無需關心。數組

var isFirst: Boolean = true
var isSecond: Boolean = false複製代碼

2、Number 類型


var aLong: Long = 123L
var aInt: Int = 1234567890
var aShort: Short = 12345

var aFloat: Float = 23F
var aDouble: Double = 23.0

var aByte: Byte = 127複製代碼

基本類型的裝箱與拆箱
Kotlin 再也不區分裝箱與非裝箱類型,在須要的時候編譯器會幫咱們自動的選擇是使用基本類型仍是裝箱類型。

3、Chat 類型

Chat 類型表示一個字符,一個字符能夠是一個字,或者一個符號等等。
字符佔兩個字節,表示一個 16 位的 Unicode 字符。
字符使用單引號 '' 引發來,例如 '中''A''\n'安全


4、數值類型的顯式轉換

在 Java 裏面,將一個 int 值賦給 long 值,是能夠容許的,由於 Int 的範圍比 long 要小,因此 long 能夠兼容 int。可是,在 Kotlin 中這樣的隱式轉換是不被支持的bash

var aInt: Int = 10
var    aLong: Long = 10000

// 編譯器會報錯
aLong = aInt

// 必須調用 toXXX 方法顯示轉換
aLong = aInt.toLong()複製代碼

每一個數值類型都支持下面的轉換函數

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

5、字符串類型

字符串本質上能夠說是"一串" Char,字符串使用雙引號 "" 引發來ui

5.1 字符串的比較

var aName: String = "fancyluo"
var bName: String = "fancyluo"

println(aName == bName) // true
println(aName === bName)// false複製代碼

熟悉 Java 的同窗對以上結果是否是就困惑了,怎麼 == 打印出來了 true,這裏咱們能夠看看== 的源碼就能夠解開疑惑了。
spa

public open operator fun equals(other: Any?): Boolean
複製代碼

Kotlin 的 == 就至關於 Java 的 equeals,表示比較內容。
Kotlin 的 === 就至關於 Java 的 ==,表示比較對象是否相同。
code


5.2 字符串模板

在 Kotlin 中,字符串能夠包含模板表達式,模板表達式由 $ 開頭,若是須要進行表達式運算,能夠寫在 {} 裏面cdn

var a: Int = 1
var b: Int = 2

// Java
println("" + a + " + " + b + " = " + (a + b))

// 字符串模板
println("$a + $b = ${a + b}")

// print: 1 + 2 = 3

// 原始字符串
var rawString = """ a b ${a + b} """複製代碼

6、數組

Kotlin 中的數組由 Array 類表示,表示以一系列的對象,可使用函數 arrayOf 來建立數組,示例以下對象

val arrayOfString: Array<String> = arrayOf("fancy", "luo")
val arrayOfUser: Array<UserInfo> = arrayOf(
            UserInfo("fancyluo", "音樂"),
            UserInfo("jack", "籃球"))複製代碼

能夠看到,咱們使用 val 來修飾數組,在 Kotlin 中,數組是不可變的。上面數組裏咱們放的都是對象,那麼基本類型的數組呢?Kotlin 中爲了防止裝箱拆箱的操做,爲每一個基本類型都專門定製了相應的數組類型,從而避免過分裝箱的消耗。例如:IntArray,CharArray 等等。
blog

val arrayOfInt: IntArray = intArrayOf(1, 2, 3)
val arrayOfChar: CharArray = charArrayOf('中', '國')複製代碼

7、區間

區間是一個數學上的概念,表示範圍。Kotlin 中區間是 ClosedRange 接口的子類,通常比較經常使用的是 IntRange。

// 閉區間 [0,1024]
var range: IntRange = 0..1024
// 半開區間 [0,1024) = [0,1023]
var untilRange = 0 until 1024

fun main(args: Array<String>) {
    // 判斷是否在區間中
    print(666 in range))
    // 區間迭代
      for (i in range) {
        print("$i, ")
    }
}複製代碼

8、空類型安全

fun getName(): String{
    return null
}複製代碼

上面的代碼在編譯器裏是會報錯的,普通狀況下,Kotlin 中是不容許返回 null 類型的,這也就代表,咱們在取這個值的時候,無需擔憂,直接使用便可。那咱們就是想返回 null 呢? 在返回值後面加個 ? 便可。

fun getName(): String?{
    return null
}複製代碼

可是,返回了空類型以後,要使用這個函數就不是這麼簡單了,若是你並不肯定此函數返回的是否爲空,那麼你須要在函數後面加上一個?,若是你肯定的知道此函數不會返回空,那麼你能夠在函數後面加上 !! 表示我明確知道返回值不爲空,可放心使用。

// 此行代碼會報錯
var nameLength = getName().length

// 不肯定是否爲空
var nameLength = getName()?.length

// 肯定不爲空
var nameLength = getName()!!.length

// getName 不爲空則返回值,爲空則再也不執行後面的邏輯
var nameLength = getName() ?: return複製代碼
相關文章
相關標籤/搜索