字符串插值在Kotlin中如何工作?

Kotlin编译器翻译"Hello, $name!" 使用类似的东西

java.lang.String.format("Hello, %s!", name)

还是有其他一些机制?

如果我有这样的课,例如:

class Client { val firstName: String val lastName: String val fullName: String get() = "$firstName $lastName" }

这个getter会返回一个缓存的字符串,还是会尝试建立一个新的字符串? 我应该使用lazyOf委托吗?

我知道不会有性能问题,除非会有数百万的fullName调用,但除了如何使用它外,我还没有find有关这个function的文档。

Kotlin编译器将此代码翻译为:

 new StringBuilder().append("Hello, ").append(name).append("!").toString() 

没有执行缓存:每次计算包含字符串模板的expression式时,都会重新生成结果字符串。

关于你的第二个问题:如果你需要兑现全名,你可以并且应该明确地做到这一点:

 class Client { val firstName: String val lastName: String val fullName = "$firstName $lastName" } 

这段代码相当于你的getFullName()只不过底层的getter getFullName()现在使用了一个最后的私有字段和结果的结果。

如您所知,在字符串插值中,将对包含占位符的字符串文字进行评估,从而产生将占位符替换为相应值的结果。 所以插值(在KOTLIN中)是这样的:

 var age = 21 println("My Age Is: $age") 

请记住:“$”符号用于插值。

你可以这样做:

 String.format("%s %s", client.firstName, client.lastName)