<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>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                ## 基本數據類型 [TOC] Kotlin的數據類型和Java是大致相同的,但是他們的寫法不同,并且類型之間的轉換也存在著差異。而且,與java不同,**Kotlin所有數據類型都是對象,因此可在任何變量上調用成員函數和屬性(字段)!Kotlin并不區分基本數據類型和它們的包裝類。** 總結如下圖所示 ![](https://box.kancloud.cn/68a2e6c965a8b07954cd8b63f2fb98c7_1102x749.png) 基礎可參考前面章節的數據類型入門 >[info]【注意】:另外,void也可以算是一種特殊的基本類型,它也有一個裝箱類 Void (跟我們后文講到的Unit、Nothing相關)。因為,Void是不能new出來的,也就是不能在堆里面分配空間存對應的值。所以,**Void是一開始在堆棧處分配好空間**。所以,將Void歸成基本類型。 ### **基本數據類型:Int、Boolean 及其他** * **Java回顧** Java 把基本數據類型和引用類型做了區分。 * 一個基本數據類型(如int)的變量直接存儲了它的值, * 一個引用類型(如String )的變量存儲的是指向包含該對象的內存地址的引用。 基本數據類型的值能夠更高效地存儲和傳遞,但是你不能對這些值調用方法,或是把它們存放在集合中。Java 提供了特殊的包裝類型(比如`java.lang.Integer` ),**在你需要對象的時候對基本數據類型進行封裝**。因此,你不能用`Collection<int>`來定義一個整數的集合,而必須用`Collection<Integer>`來定義。 * **kotln中的數據類型** Kotlin并不區分基本數據類型和包裝類型,你使用的永遠是同一個類型(比如:Int) ``` val i: Int = 1 val list: List<Int > = listOf(l, 2, 3) ``` 還能對一個數字類型的值調用方法。例如下面這段代碼中, 使用了標準庫的函數coerceIn 來把值限制在特定范圍內: ~~~ fun main(args: Array<String>) { showProgress(146) } fun showProgress(progress:Int){ val percent =progress.coerceIn(0,100) println("We're ${percent}% done!") } ~~~ 運行結果 ``` We're 100% done! Process finished with exit code 0 ``` >[info]【注意】如果基本數據類型和引用類型是一樣的,但并不意味著Kotlin使用對象來表示所有的數字,很低效,所以Kotlin 并沒有這樣做。 在運行時,數字類型會盡可能地使用最高效的方式來表示。大多數情況下一一對于變量、屬性、參數和返回類型——Kotlin 的Int 類型會被編譯成Java 基本數據類型int 。唯一不可行的例外是泛型類,比如集合。用作泛型類型參數的基本數據類型會被編譯成對應的Java 包裝類型。例如, Int 類型被用作集合類的類型參數時,集合類將會保存對應包裝類型`java.lang.Integer` 的實例。 像Int 這樣的Kotlin 類型在底層可以輕易地編譯成對應的Java 基本數據類型,因為兩種類型都不能存儲null 引用。反過來也差不多: **當你在Kotlin 中使用Java聲明時,Java 基本數據類型會變成非空類型(而不是平臺類型),因為它們不能持有null 值**。 ### **可空的基本數據類型:Int?、Boolean?及其他** Kotlin 中的可空類型不能用Java 的基本數據類型表示,因為null只能被存儲在Java的引用類型的變量中。這意味著任何時候只要使用了基本數據類型的可空版本,它就會編譯成對應的包裝類型。 **使用可空的基本數據類型** ``` fun main(args: Array<String>) { println(Man("Sam",35).isOlderThan(Man("Amy",42))) println(Man("Sam",35).isOlderThan(Man("Amy"))) } class Man(val name:String,val age:Int?=null){ fun isOlderThan(other:Man):Boolean?{ if(age ==null ||other.age ==null) return null return age > other.age } } ``` 運行結果 ``` false null Process finished with exit code 0 ``` 【注意】普通的可空性規則如何在這里應用?你不能就這樣比較Int?類型的兩個值,因為它們之中任何一個都可能為null 。相反,你必須檢查兩個值都不為null 。然后,編譯器才允許你正常地比較它們。 在Man類中聲明的age 屬性的值被當作`java.lang.Integer` 存儲。但是只有在你使用來自Java 的類時這些細節才有意義。為了在Kotlin 中選出正確的類型,你只需要考慮對變量或者屬性來說,null是否是它們可能的值。 泛型類是包裝類型應用的另一種情況。如果你用基本數據類型作為泛型類的類型參數,那么Kot lin 會使用該類型的包裝形式。例如,下面這段代碼創建了一個Integer 包裝類的列表,盡管你從來沒有指定過可空類型或者用過null 值: ``` val listOfInts = listOf(1,2,3) ``` 這是由Java 虛擬機實現泛型的方式決定的。**JVM不支持用基本數據類型作為類型參數,所以泛型類(Java 和Kotlin 一樣)必須始終使用類型的包裝表示**。因此,假如你要高效地存儲基本數據類型元素的大型集合,要么使用支持這種集合的第三方庫(如Trove4J, http: //trove.starlight-systems.com),要么使用數組來存儲。本章末尾我們會討論數組的細節。
                  <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>

                              哎呀哎呀视频在线观看