2017-05-31 7 views
0

Was ist der Unterschied zwischen

String test = "blah" 
print("this is a test ${test} blah blah") 

und

wörtlichen
print("This is a test " + test + " blah blah") 
+0

[Es wird String-Interpolation genannt] (https://en.wikipedia.org/wiki/String_interpolation). Es ist einfach lesbarer. – m0skit0

+0

Letztere ergibt eine 'java.lang.String', während die erste eine' org.codehouse.groovy.runtime.GStringImpl' ergibt. Es ist meistens nur syntaktischer Zucker. – jsheeran

Antwort

2

Wenn ein String ${} enthält wäre, konstruiert Groovy ein GString.

Per seiner Javadoc, ein GString:

Stellt eine Zeichenfolge, die wie "hello there ${user} how are you?" eingebettete Werte enthält, die gemächlich ausgewertet werden kann. Fortgeschrittene Benutzer können über den Text und die Werte iterieren, um spezielle Verarbeitungen auszuführen, beispielsweise um SQL-Operationen auszuführen. Die Werte können durch ? ersetzt werden und die tatsächlichen Wertobjekte können an eine JDBC-Anweisung gebunden werden.

So trägt das "this is a test ${test} blah blah" seine Struktur, die programmatisch untersucht werden kann. Dagegen ist die "This is a test " + test + " blah blah" eine unveränderliche Zeichenkette wie in Java.

Normalerweise hat dies keine Auswirkungen auf den Programmierer, aber gelegentlich überraschende Dinge passieren - siehe: dynamically set the db in a sql query

+0

Aah danke. Die SO-Frage, die Sie verknüpften, war das Problem, das ich hatte –

0

Eigentlich jeder String, „“ verwenden GString ist. Und wenn Sie '' verwenden, bedeutet dies, dass Sie java.lang.String verwenden. Leider ist String in Java die letzte Klasse. Also, groovy Entwickler machen Workaround.

+1

[Sicher darüber?] (Https://groovyconsole.appspot.com/script/5099807190286336). Ich beobachte, dass '" $ x ".getClass()' '' org.codehouse.groovy.runtime.GStringImpl' zurückgibt, aber '" abc ".getClass()' returns 'java.lang.String'. –

+0

Unterscheidet sich vielleicht zwischen Versionen? – slim

+0

@HuguesMoreau Groovy macht viel Magie. So könnte GString in String umgewandelt werden. –

Verwandte Themen