Wie funktioniert die String-Interpolation in Kotlin?

Übersetzt der Kotlin-Compiler"Hello, $name!" mit etwas wie

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

oder gibt es einen anderen Mechanismus?

Und wenn ich eine Klasse wie diese habe, zum Beispiel:

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

Wird dieser Getter eine zwischengespeicherte Zeichenfolge zurückgeben oder wird er versuchen, eine neue Zeichenfolge zu erstellen? Soll ich stattdessen lazyOf delegate verwenden?

Ich weiß, dass es keine Leistungsprobleme geben wird, wenn nicht Millionen von Anrufen an @ erfolgefullName, aber ich habe keine Dokumentation zu dieser Funktion gefunden, außer zur Verwendung.