- 基本数据类型数组
- 3种基本数据类型数组的创建方法
一、基本数据类型数组
kotlin 编译器将元素是基本类型的 kotlin 对象数组编译成 Java 中的包装类数组,而 Java 中的包装类数组与 Java 中的基本数据类型数组相比,包装类数组数据存储空间占用较大,运算效率差。因此,kotlin 中提供了8种基本数据类型数组,分别对应 Java 中的8种基本数据类型数组。例如:kotlin 中的 IntArray 被编译为 Java 中的 int[]数组。
下面是 Kotlin 中8种数据类型数组,与编译后的 Java 代码比较。
// kotlin 8种基本数据类型数组
fun main(args: Array<String>?) {
val ints: IntArray = intArrayOf(1)
val shorts: ShortArray = ShortArray(1)
val btyes: ByteArray = byteArrayOf(3)
val longs: LongArray = LongArray(4) { (it * it).toLong() }
val floats: FloatArray = floatArrayOf(23.2f)
val doubles: DoubleArray = doubleArrayOf(3.3)
val chars: CharArray = charArrayOf('a')
val booleans: BooleanArray = booleanArrayOf(false)
}
// kotlin 通过转换编译后的 java 代码
@Metadata(
mv = {1, 1, 15},
bv = {1, 0, 3},
k = 2,
d1 = {"\u0000\u0014\n\u0000\n\u0002\u0010\u0002\n\u0000\n\u0002\u0010\u0011\n\u0002\u0010\u000e\n\u0002\b\u0006\u001a\u001b\u0010\u0000\u001a\u00020\u00012\u000e\u0010\u0002\u001a\n\u0012\u0004\u0012\u00020\u0004\u0018\u00010\u0003¢\u0006\u0002\u0010\u0005\u001a\u001f\u0010\u0006\u001a\u00020\u0001\"\u0004\b\u0000\u0010\u00072\f\u0010\b\u001a\b\u0012\u0004\u0012\u0002H\u00070\u0003¢\u0006\u0002\u0010\t¨\u0006\n"},
d2 = {"main", "", "args", "", "", "([Ljava/lang/String;)V", "printArray", "T", "array", "([Ljava/lang/Object;)V", "kotlin_module"}
)
public final class WwwwKt {
public static final void printArray(@NotNull Object[] array) {
Intrinsics.checkParameterIsNotNull(array, "array");
boolean var3 = false;
String printStr = array.length == 0 ? "[]" : ArraysKt.joinToString$default(array, (CharSequence)", ", (CharSequence)"[", (CharSequence)"]", 0, (CharSequence)null, (Function1)null, 56, (Object)null);
boolean var2 = false;
System.out.println(printStr);
}
public static final void main(@Nullable String[] args) {
int[] var10000 = new int[]{1};
short[] shorts = new short[1];
byte[] var16 = new byte[]{3};
int size$iv = 4;
int $i$f$LongArray = false;
long[] result$iv = new long[size$iv];
int i$iv = 0;
for(int var9 = result$iv.length; i$iv < var9; ++i$iv) {
int var11 = false;
long var14 = (long)(i$iv * i$iv);
result$iv[i$iv] = var14;
}
float[] var17 = new float[]{23.2F};
double[] var18 = new double[]{3.3D};
char[] var19 = new char[]{'a'};
boolean[] var20 = new boolean[]{false};
}
}
kotlin 中8中基本数据类型数组与 Java 中基本数据类型数组的对应关系
Kotlin 基本数据类型数组 | Java 中基本数据类型数组 |
---|---|
ByteArray | byte[] |
ShortArray | short[] |
IntArray | int[] |
LongArray | long[] |
FloatArray | float[] |
DoubleArray | double[] |
CharArray | char[] |
BooleanArray | boolean[] |
二、3种基本数据类型数组的创建方法
每一种基本数据类型数组的创建都有3中方式,一下是以 Int 类型为例:
-
intArrayOf(vararg elements: Int) 工厂函数:指定数组元素列表,创建元素类型为 Int 的数组,vararg 表明参数个数是可变的。
-
IntArray(size: Int) 构造函数:size 参数指定数组大小,创建元素为 Int 的数组,数组中的元素为该类型默认值,Int 的默认值为0。
-
IntArray(size: Int, init: (Int) -> Int) 构造函数:通过 size 参数指定数组大小,init 参数指定一个用于初始化元素的函数,实际使用时经常是 Lambda 表达式,索引值从0开始。
fun <T> printArray(iterator: Iterator<T>) {
val builder = StringBuilder("[")
var first = true
while (iterator.hasNext()) {
if (!first) builder.append(", ")
builder.append(iterator.next())
first = false
}
builder.append("]")
println(builder.toString())
}
fun main(args: Array<String>?) {
val array1 = intArrayOf(1, 2, 4, 5, 6)
val array2 = CharArray(3)
array2[0] = 'a'
array2[1] = 'b'
array2[2] = 'c'
val array3 = IntArray(5) { it * it } // 尾随lambda表达式
val array4 = BooleanArray(0)
val array5 = IntArray(3)
printArray(array1.iterator())
printArray(array2.iterator())
printArray(array3.iterator())
printArray(array4.iterator())
printArray(array5.iterator())
}
2019-06-12 11:28:51.035 7129-7129/cn.ak.kot I/System.out: [1, 2, 4, 5, 6]
2019-06-12 11:28:51.035 7129-7129/cn.ak.kot I/System.out: [a, b, c]
2019-06-12 11:28:51.035 7129-7129/cn.ak.kot I/System.out: [0, 1, 4, 9, 16]
2019-06-12 11:28:51.036 7129-7129/cn.ak.kot I/System.out: []
2019-06-12 11:28:51.037 7129-7129/cn.ak.kot I/System.out: [0, 0, 0]
网友评论