有趣的 Kotlin 0x0D:IntArray vs Array<Int>

本文探讨了Java中IntArray与Array<Int>的差异,主要在于IntArray是原始类型int的数组,而Array<Int>是Integer对象数组,存在装箱开销。通过性能测试展示了在大量元素时,IntArray由于避免了装箱操作,性能更优。建议默认使用IntArray以获取更好的性能,若需使用null值则选择Array<Int>。
摘要由CSDN通过智能技术生成

介绍

IntArray

整数数组。在 JVM 平台上,对应 int[]

Array<Int>

Array<T> 表示 T 类型数组。在 JVM 平台上,Array<Int> 对应 Integer[]

验证

fun main() {
    val one = IntArray(10) { it }
    val two = Array<Int>(10) { it }
}

Decompile

Java Code

综上,JVM 平台上,IntArrayArray<Int> 的区别在于对应的类型不同,一个是基础类型 int 数组,另外一个是封装类型 Integer 数组,有装箱开销

开销差距

一般情况下,看不出差距,只能用放大镜看一下了。

@OptIn(ExperimentalTime::class)
fun main() {

    val duration1 = measureTime {
        case1()
    }
    println(duration1)

    val duration2 = measureTime {
        case2()
    }
    println(duration2)
}

private fun case1() {
    val t = IntArray(10_000_000)
}

private fun case2() {
    val t = Array<Int>(10_000_000) { it }
}

运行结果

使用场景

  • 默认使用 IntArray,基础类型因无装箱开销而性能好,且每个元素都有默认值 0
  • 如果数组需要使用 null 值,使用 Array\<Int>

StackOverflow

高赞回答,一言以蔽之。

StackOverflow Issues

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AndroidKt

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值