据我了解,?.let{}over的最大优点!= null是它保证了块内的可变值不会改变。
但是,在不可变变量的情况下是否存在性能差异?
例如,我有一个简单的方法
private fun test() {
val x: String? = ""
if (x != null) {
print("test")
}
x?.let {
print("test")
}
}
Run Code Online (Sandbox Code Playgroud)
当我看到生成的 Kotlin 字节码时,它似乎有更多的代码。
对于 x != null 情况:
LINENUMBER 8 L1
L2
LINENUMBER 9 L2
LDC "test"
ASTORE 2
L3
GETSTATIC java/lang/System.out : Ljava/io/PrintStream;
ALOAD 2
INVOKEVIRTUAL java/io/PrintStream.print (Ljava/lang/Object;)V
L4
L5
Run Code Online (Sandbox Code Playgroud)
对于 x?.let { } 情况是:
LINENUMBER 12 L5
ALOAD 1
ASTORE 2
L6
L7
ALOAD 2
ASTORE 3
L8
ICONST_0 …Run Code Online (Sandbox Code Playgroud)