内联函数不需要产生额外的生成函数对象,也不需要产生捕获,也不需要处理函数调用的压栈和出栈开销
如果将inline取消,系统会生成对应的class文件,这表明系统将会为Lambda表达式额外生成一个函数对象,自然也会产生函数调用的压栈和出栈的开销
内联函数的本质就是复制粘贴到原来的执行函数中调用,因此如果被调用的Labmda表达式或函数的代码量非常大,且该Lambda表达式或函数多次被调用——注意每调用一次,该llambda表达式或函数包含大量的执行大妈,那么就不应该使用内联函数;如果被调用的Lambda表达式或函数只包含非常简单的执行代码(尤其时单表达式),那么就应该使用内联函数
使用inline修饰函数之后,左右传入该函数的Lambda表达式或函数都会被内联化;如果我们希望该函数中某一个或某几个函数类型的形参不会被内联化,则可以使用noinline修饰他们
在Lambda表达式中直接使用return不是永不返回表达式,而是用于返回该表达式所在的函数,在默认情况下,在Lambda表达式中并不允许直接使用return
目前内联的Lambda表达式目前不支持break和continue流程控制,但未来Kotlin计划支持该功能