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[]类似) 是有原因的。

上一篇下一篇

猜你喜欢

热点阅读