Array和IntArray
2020-08-20 本文已影响0人
主音King
IntArray为什么存在
Array<Int>和IntArray不同存在。为什么要搞个IntArray?
还有DoubleArray、LongArray等
val intArray = intArrayOf(1,2,3)// IntArray类型
int[] array = new int[]{1,3,4};
上面两个是等价的,没有进行int的装箱。分析字节码几乎相同(除了行号)
val arrayOfInt = arrayOf(1,3,4)// Array<Int>类型
这种歧视是构造出一个Integer[],每加个数字,调用Integer.valueOf产生装箱。
一些写法:
fun test() {
states = arrayOfNulls(4)
Log.d(TAG, "test-states:$states ${states!![0]}")
states!![0] = intArrayOf(1, 1)
states!![1] = intArrayOf(2, 2)
for (i in states!!.indices) {
if (states!![i] != null)
for (j in states!![i]!!.indices) {
Log.d(TAG, "test-i:$i j:$j ${states!![i]!![j]}")
}
}
}
总结
Kotlin不少类型是对Java的扩展,扩展不方便就编译期做映射(kotlin.String-->Java.lang.String,kotlin.collections.MutableMap-->java.util.Map)。kotlin是开源的,源码面前无秘密。
IntArray没有进行装箱/拆箱;Array<Int>进行了装箱/拆箱。IntArray性能更高,开销小,所以kotlin造出IntArray (int[]类似) 是有原因的。