Kotlin學習筆記(三):Kotlin 數據類型及使用方式梳理


一、Kotlin數據類型分類

Kotlin的數據類型分為以下幾種:

  • 基本數據類型:數值類型、字符類型、字符串類型,字節類型、布爾類型和數組類型。
  • 其他類型:集合、映射、類、接口。

Kotlin所有數據類型都是引用類型,所以可以在數據上直接訪問屬性和調用方法。

二、Kotlin數值類型

Kotlin的數值類型和大部分語言一樣,分為整型和浮點型。其中,整型分為:整型Int、長整型Long、短整型Short;浮點型分為:單精度Float、雙精度Double。

注意:

  1. 在Kotlin中,Long類型只能用L作為后綴,Float類型可以使用f/F后綴,Double類型可以使用d/D后綴。
  2. 浮點型數據一般只用作展示,不建議使用浮點型的數據直接進行計算,應使用“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中,如果編譯器能從上下文推斷出對象的真實類型,則在該上下文對象會自動轉換為真實類型,這個特性被稱為智能轉換。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM