日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Kotlin的基本数值类型问题:是对象?还是基本数据类型?

發布時間:2025/3/21 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Kotlin的基本数值类型问题:是对象?还是基本数据类型? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

我們都知道Java中一直在說萬物皆對象,面向對象編程,但基本數據類型卻不是對象,

而Kotlin中的所有類型都是對象,包括基本數值類型和方法,

而數值對象的運行效率不如基本數據類型(具體請自行搜索);

猜測

那么,Kotlin中使用數值進行運算是否會比Java中使用數值運算效率更慢呢?

理論

在Java平臺上,Kotlin的數字類型被物理存儲為JVM原始類型,除非需要一個可空的數字引用(例如Int?)或涉及泛型;在后一種情況下,數字是裝箱的(也就是對象);

實踐

(一)現在隨便瞎寫一個算法來測試一下:

val startTime = System.currentTimeMillis()var a: Double = 0.0for (i in 0..9999999) {if (a != null) {a += (i * 3 / 4 / 5 * 6 * 7 / 8)a -= (i * 3 + a / 4)}}println("值為$a,所用時間${System.currentTimeMillis() - startTime}")

上面的a是非null類型的,看下五次的運行時間:

平均執行時間為:141.4毫秒

(二)修改a為可null類型,進行測試:

val startTime = System.currentTimeMillis()var a: Double? = 0.0for (i in 0..9999999) {if (a != null) {a += (i * 3 / 4 / 5 * 6 * 7 / 8)a -= (i * 3 + a / 4)}}println("值為$a,所用時間${System.currentTimeMillis() - startTime}")

五次運行時間:

平均運行時間為:291毫秒,比非null時慢了整整一倍

而我用java的基本數據類型和非null時間近似,就不展示了

查看字節碼

不可空的基本類型

通過kotlin自帶的插件查看字節碼(反編譯后)如下

?

?可空的基本類型

?通過kotlin自帶的插件查看字節碼(反編譯后)如下

?

結論

Kotlin的數值類型設置為可null確實會損失性能(是對象類型的數值),所以若有和性能相關的運算(比如算法),請不要使用可null的數值類型.或者使用Java寫,使用Kotlin調用;

延伸

Java的對象數據類型會緩存一些值(Int的緩存范圍為-128到127),而Kotlin有沒有呢?

ps:Kotlin的==是比較的值, ===是比較的引用值

先比較非null的值

val test0: Int = 127val test1: Int = 127println(test0 === test1)

結果為true

把它們兩個改為128也為true

結果:非null的數值類型確實是使用的基本數據類型

比較可null的值

val test0: Int? = 128val test1: Int? = 128println(test0 === test1)

結果為false

把它們兩個改為127,打印true

結果:可null的數值類型是對象,并且也和Java一樣有緩存值

總結

以上是生活随笔為你收集整理的Kotlin的基本数值类型问题:是对象?还是基本数据类型?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。