API中对此不做任何保证。
TLDR:如果需要顺序执行,因为您有某种状态需要更改,请参见底部。
首先让我们看一下初始化程序的实现:
@InlineConstructor
public constructor(size: Int, init: (Int) -> Char): this(size) {
for (i in 0..size - 1) {
this[i] = init(i)
}
}
Run Code Online (Sandbox Code Playgroud)
JVM:反编译Kotlin字节码
class test {
val intArray = IntArray(100) { it * 2 }
}
Run Code Online (Sandbox Code Playgroud)
在Android Studio中使用Java产生:
public final class test {
@NotNull
private final int[] intArray;
@NotNull
public final int[] getIntArray() {
return this.intArray;
}
public test() {
int size$iv = 100;
int[] result$iv = new int[size$iv];
int i$iv = 0;
for(int var4 = result$iv.length; i$iv < var4; ++i$iv) {
int var6 = false;
int var11 = i$iv * 2;
result$iv[i$iv] = var11;
}
this.intArray = result$iv;
}
}
Run Code Online (Sandbox Code Playgroud)
它支持声称它是按升序初始化的。
结论:它通常实现为按升序执行。
但是:您不能依赖执行顺序,因为API不能保证实现。它可能会发生变化,并且对于不同的平台它可能会有所不同(尽管两者均不太可能)。
解决方案:您可以手动循环初始化数组,然后可以控制执行顺序。下面的示例概述了一个可能的实现,该实现具有稳定的,具有随机值的初始化,例如用于测试。
val intArray = IntArray(100).also {
val random = Random(0)
for (index in it.indices) {
it[index] = index * random.nextInt()
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
133 次 |
最近记录: |