<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                ### 數值類型 [TOC] #### 數字自動裝箱-表示方式 Kotlin數字在虛擬機中是物理存儲為JVM原生類型,但如果是**可null引用(有問號?)或者泛型對象**, 那么kotlin數字就會自動裝箱(類似java包裝類,如int自動裝箱轉為Integer) >[info] 在Kotlin中,存在數字的裝箱,但是不存在拆箱 **kotlin數字自動裝箱的實例:** ~~~ val a: Int = 10000 val boxA: Int? = a //有問號? 會自動裝箱 val boxB: Int? = a //有問號? 會自動裝箱 print(boxA === boxB) //輸出false,如果數值在-128和127之間,輸出true print(boxA == boxB) //輸出true ~~~ **兩個數值的比較:==和===** * kotlin三個等號===:比較的是對象地址(引用),自動裝箱會生成新對象,兩個對象不同,輸出false;但是數值在-128和127之間時,自動裝箱會重用同一個對象(java緩存機制),輸出true * kotlin兩個等號==:比較的是對象數值,兩個對象數值相同,輸出true 也可參考kotlin官方參考文檔給的示例 **三個等號===** ~~~ 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) // 輸出“true” val boxedA: Int? = a val anotherBoxedA: Int? = a print(boxedA == anotherBoxedA) // 輸出“true” ~~~ #### 顯式轉換 **范圍較小數字類型不能隱式轉換為范圍較大類型**。 (引申義:可以顯示轉換) ~~~ val b: Byte = 1 // 正確, 字面值是靜態檢測的 val i: Int = b // 錯誤: 隱式擴寬 val i: Int = b.toInt() // 正確: 顯式擴寬 ~~~ 每個數字類型支持如下類型轉換: ~~~ toByte(): Byte toShort(): Short toInt(): Int toLong(): Long toFloat(): Float toDouble(): Double toChar(): Char ~~~ 示例: ~~~ fun main(args: Array<String>) { var numA: Int = 97 println(numA.toByte()) println(numA.toShort()) println(numA.toInt()) println(numA.toLong()) println(numA.toFloat()) println(numA.toDouble()) println(numA.toChar()) println(numA.toString()) } ~~~ 輸出結果如下 ~~~ 97 97 97 97 97.0 97.0 a 97 ~~~ #### 運算符 + 重載 **缺少隱式擴寬轉換是很少引人注意的,因為類型是從上下文推斷出來的,而算術運算會有重載做適當擴寬轉換**,例如: ~~~ val l = 1L + 3 // Long + Int ——> Long ~~~ 這個是通過運算符 + 重載實現的。我們可以在[Long類](https://www.w3cschool.cn/doc_kotlin/kotlin-api-latest-jvm-stdlib-kotlin--long-index.html?lang=en)的源代碼中看到這個 plus 運算符函數的定義: ``` public operator fun plus(other: Byte): Long public operator fun plus(other: Short): Long public operator fun plus(other: Int): Long public operator fun plus(other: Long): Long public operator fun plus(other: Float): Float public operator fun plus(other: Double): Double ``` 也就是說, 編譯器會把 1L + 3 翻譯成 1L.plus(3) ,然后這個傳入的參數類型必須是Byte、Short、Int、Long、Float、Double中的一種。例如,我們傳入一個字符 Char 參數,比如 ~~~ val l=1L+'a' ~~~ 編譯器就會直接拋錯: ``` Error:(26, 13) Kotlin: None of the following functions can be called with the arguments supplied: public final operator fun plus(other: Byte): Long defined in kotlin.Long public final operator fun plus(other: Double): Double defined in kotlin.Long public final operator fun plus(other: Float): Float defined in kotlin.Long public final operator fun plus(other: Int): Long defined in kotlin.Long public final operator fun plus(other: Long): Long defined in kotlin.Long public final operator fun plus(other: Short): Long defined in kotlin.Long ``` 除了這個加法運算,觀察源碼我還可以看到加減乘除都有對應的方法 >[info]【PS】:其實我們在idea工具中查看源碼知道這些基本數據類型都在Primitives.kt文件中,在前面的數據類型和類型系統章節結尾處,可以看到各個數據類型的方法和屬性。 * **Long** ![](https://box.kancloud.cn/9d895c5c47fbd747ad0c2db872cdbd76_370x670.png) ![](https://box.kancloud.cn/2498405ca1e6bd1f6e919c998b7fe42d_370x692.png) ![](https://box.kancloud.cn/d9579ad40bfc8aa81c817414897d2366_370x458.png)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看