牛骨文教育服务平台(让学习变的简单)
博文笔记

kotlin的forEach()扩展函数的性能检验

创建时间:2018-01-10 投稿人: 浏览次数:579

问题

对数组与集合,有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表达式中的代码内联到调用处

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。