问题
对数组与集合,有forEach()扩展,可以很方便的写遍历代码,但是需要创建一个lambda对象,如果在工程上全面使用forEach(),会不会创建很多的lambda对象,从而导致性能下降。
分析
fun main(args: Array<String>) {
args.forEach {
println(it)
}
}
编译成的java代码
public final void main(@NotNull String[] arg)
{
Intrinsics.checkParameterIsNotNull(arg, "arg"); Object[] $receiver$iv = (Object[])arg;
int $i$f$forEach;
for (int i = 0; i < $receiver$iv.length; ) { Object element$iv = $receiver$iv[i]; String it = (String)element$iv;
int $i$a$1$forEach;
System.out.println(it);
i++;
}
}
解答
forEach()在运行时不会产生lambda对象,不会比for()表达式性能差,因为他是inline修饰的,kotlin编译器会lambda表达式中的代码内联到调用处