You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin中arrayOf、arrayOf<Int>与intArrayOf的差异及arrayOf用Integer的原因

Kotlin中arrayOf创建Integer数组而非int数组的原因

核心本质差异

  • Array<Int> 在JVM平台底层对应**Integer[]对象数组**
  • IntArray 在JVM平台底层对应**int[]基本类型数组**

为什么arrayOf生成的是Integer数组?

  1. JVM泛型的天生限制
    JVM的泛型机制基于类型擦除实现,且泛型参数仅支持引用类型,无法直接使用int这类基本类型。arrayOf()是泛型函数,创建的是Array<T>类型数组,当T指定为Kotlin的Int时,JVM只能用对应的包装类型Integer来适配泛型要求,因此底层最终是Integer[]。

  2. 函数的设计定位不同

  • arrayOf()是通用数组创建工具,能适配所有Kotlin类型(包括引用类型、基本类型的装箱形式),主打泛型场景下的统一创建逻辑。
  • intArrayOf()是专门针对基本类型int设计的数组创建函数,直接绕过泛型限制,生成JVM原生的int[]数组,避免了装箱拆箱的性能损耗,适合不需要包装类型的场景。

示例代码验证

var a = arrayOf(1,2,3)
var b = arrayOf<Int>(4,5,6)
var c = intArrayOf(7,8,9)

println(a) //[Ljava.lang.Integer;@5d099f62
println(b) //[Ljava.lang.Integer;@31cefde0
println(c) //[I@439f5b3d
  • 输出里的[Ljava.lang.Integer;是JVM对Integer[]数组的标识,[L代表对象数组,后面跟着对应的类名
  • [I是JVM对int[]数组的标识,[表示数组,I是基本类型int的缩写

内容的提问来源于stack exchange,提问作者shanraisshan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 21:01:05