字符串模板的使用
在Kotlin中可以直接在字符串字面值中引用变量,例如:
val name = "william"
val str = "my name is ${name}"
println(str)
并且Kotlin官方文档建议使用字符串模板来替代字符串连接符的使用,原因在于我们知道String类是immutable的,字符串连接符的实现原理是每次都会产生一个新的String对象来保存连接后的新字符串,所以会十分耗费内存。
那么字符串模板的实现原理是什么呢?为什么会比使用字符串连接符要高效?我们写一下测试代码反编译看看字节码就清楚了
字符串模板的原理
测试代码:
fun test() {
val name = "william"
val str = "my name is ${name}"
println(str)
}
反编译之后的部分代码:
public final test()V
L0
LINENUMBER 7 L0
LDC "william"
ASTORE 1
L1
LINENUMBER 8 L1
NEW java/lang/StringBuilder
DUP
INVOKESPECIAL java/lang/StringBuilder.<init> ()V
LDC "my name is "
INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/String;)Ljava/lang/StringBuilder;
ALOAD 1
INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/String;)Ljava/lang/StringBuilder;
INVOKEVIRTUAL java/lang/StringBuilder.toString ()Ljava/lang/String;
ASTORE 2
...
可以看到字符串模板在编译的时候会转成使用StringBuilder.append方法来实现字符串的拼接。
标签:lang,Ljava,name,Kotlin,StringBuilder,字符串,模板 From: https://www.cnblogs.com/jqctop1/p/17428993.html