Kotlin中arrayOf、arrayOf<Int>与intArrayOf的差异及arrayOf用Integer的原因
Kotlin中arrayOf创建Integer数组而非int数组的原因
核心本质差异
Array<Int>在JVM平台底层对应**Integer[]对象数组**IntArray在JVM平台底层对应**int[]基本类型数组**
为什么arrayOf生成的是Integer数组?
JVM泛型的天生限制
JVM的泛型机制基于类型擦除实现,且泛型参数仅支持引用类型,无法直接使用int这类基本类型。arrayOf()是泛型函数,创建的是Array<T>类型数组,当T指定为Kotlin的Int时,JVM只能用对应的包装类型Integer来适配泛型要求,因此底层最终是Integer[]。函数的设计定位不同
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
相关产品推荐
相关产品推荐

