一、Kotlin數據類型分類
Kotlin的數據類型分為以下幾種:
- 基本數據類型:數值類型、字符類型、字符串類型,字節類型、布爾類型和數組類型。
- 其他類型:集合、映射、類、接口。
Kotlin所有數據類型都是引用類型,所以可以在數據上直接訪問屬性和調用方法。
二、Kotlin數值類型
Kotlin的數值類型和大部分語言一樣,分為整型和浮點型。其中,整型分為:整型Int、長整型Long、短整型Short;浮點型分為:單精度Float、雙精度Double。
注意:
- 在Kotlin中,Long類型只能用L作為后綴,Float類型可以使用f/F后綴,Double類型可以使用d/D后綴。
- 浮點型數據一般只用作展示,不建議使用浮點型的數據直接進行計算,應使用“BigDecimal”類型代替浮點類型計算。
這里使用一個實例幫助大家加深一下理解:
/** * 加、減、乘、除 高精度計算工具類 */ object BigDecimalUtils { const val DECIMAL_POINT_NUMBER:Int = 2; // 精確到小數點后2位 // 加法運算 fun add(d1 : Double, d2: Double) = BigDecimal(d1).add(BigDecimal(d2)).setScale(DECIMAL_POINT_NUMBER, BigDecimal.ROUND_DOWN).toDouble() // 減法運算 fun sub(d1:Double,d2: Double):Double = BigDecimal(d1).subtract(BigDecimal(d2)).setScale(DECIMAL_POINT_NUMBER,BigDecimal.ROUND_DOWN).toDouble() // 乘法運算 fun mul(d1:Double,d2: Double,decimalPoint:Int):Double = BigDecimal(d1).multiply(BigDecimal(d2)).setScale(decimalPoint,BigDecimal.ROUND_DOWN).toDouble() // 除法運算 fun div(d1:Double,d2: Double):Double = BigDecimal(d1).divide(BigDecimal(d2)).setScale(DECIMAL_POINT_NUMBER,BigDecimal.ROUND_DOWN).toDouble() }
這里的setScale方法用於格式化小數點,后面參數為舍入模式。
三、Kotlin字符&字符串類型
字符類型:Char。字符串類型:String。
這里Kotlin提供了字符串模版,允許我們在字符串中嵌入表達式。在使用的時候需要將表達式用‘${}’包裹。
四、Kotlin字節類型和布爾類型
字節類型:Byte,一般用於表示一個二進制數據。
布爾類型:Boolean,只有兩個值:true 和 false。(注意:在Kotlin中,布爾類型不能用0或1表示)。
五、Kotlin 內置類型結構
1. Any 類型 - 所有類的父類
Any類型是所有類的父類。即:數值類型是Any類型,字符串類型也是Any類型,開發者在Kotlin中定義的任何類型的類都是Any類型。
下面是Any類型在Kotlin源碼中的定義:
public open class Any { public open operator fun equals(other: Any?): Boolean public open fun hashCode(): Int public open fun toString(): String }
2. Unit 類型 - 什么都不返回
在Kotlin中,Unit類型表示什么都不返回,類似於Java中的void類型。
下面是Kotlin源碼中對Unit的定義:
public object Unit { override fun toString() = "kotlin.Unit" }
3. Nothing 類型 - 什么都沒有
在Kotlin中,Nothing類型表示什么都不返回。當一個方法返回Nothing類型時,意味着:它永遠不會返回內容,只會拋出異常。
/** * Nothing has no instances. You can use Nothing to represent "a value that never exists": for example, * if a function has the return type of Nothing, it means that it never returns (always throws an exception). */ public class Nothing private constructor()
六、類型判斷和類型轉換
1. 強制類型轉換
強制類型轉換的語法為 as,需要明確指定需要轉換的目標類型。使用示例如下:
val fooString: String = foo as String
注意,如果無法成功轉換類型的時候,程序會拋出"Type misamtch"異常。
2. 安全類型轉換
如果需要進行安全類型轉換,需要在 as 后面加 ? ,這樣當轉換失敗的時候,會返回空值。注意:安全類型轉換的值,只能賦給可空類型的變量。
// 使用安全轉換操作符as?可以在轉換失敗時返回null,避免了拋出異常。 var str = null var str2 = str as? String println(str2) //輸出結果為:null
3. 類型判斷與智能轉換
在Kotlin中,我們可以使用“is”操作符來判斷一個對象是否是指定的數據類型。
示例:
fun bar(foo: Any) { if(foo is String) println(foo) }
在上面的例子中,如果參數foo是String類型,則調用bar的時候,會在控制台打印該字符串。
在Kotlin中,如果編譯器能從上下文推斷出對象的真實類型,則在該上下文對象會自動轉換為真實類型,這個特性被稱為智能轉換。