• IT-Karriere:
  • Services:

Textblöcke und String-Literale sind ununterscheidbar

Hat der Compiler den Block geprüft und in einen String übersetzt, ist das Ergebnis ununterscheidbar von einem üblichen String-Literal mit gleichem Inhalt. Im obigen Beispiel heißt das, dass jsonBlock.equals(jsonPhrase) wahr ist.

Stellenmarkt
  1. comito solutions GmbH, Köln
  2. Allianz Versicherungs-AG, München Unterföhring

Der Compiler geht aber noch einen Schritt weiter. String-Konstanten werden beim Kompilieren dedupliziert, um zur Laufzeit Speicher zu sparen. Dadurch sind gleiche Literale nicht nur equal, sondern auch nach == identisch. Das ist praktisch, wenn an vielen Stellen im Code die gleichen Schnipsel auftauchen, kann aber sehr unangenehm sein, wenn man das vergisst und zum Beispiel einen String als Sperre verwendet.

Dieser Mechanismus wird unabhängig davon angewandt, ob ein String mit einem Literal oder einem Textblock erstellt wurde. Das heißt konkret, dass sogar jsonBlock == jsonPhrase wahr ist. Textblöcke sind also ein reines Compiler Feature und zur Laufzeit lässt sich nicht unterscheiden, wie eine String-Instanz im Code definiert wurde.

Normalisierung der Zeilenenden

Ein interessanter Aspekt von Textblöcken ist, dass sich hier Eigenschaften der Textdateien, die den Quellcode enthalten, mit der Semantik des Codes vermischen. Offensichtlich wird dies bei Zeilenenden: Ob Zeilen mit \r\n (CRLF - üblich unter Windows) oder \n (LF - üblich unter Unix) enden, ist eine reine Konfigurationsfrage, aber wenn der Compiler diese stillschweigend übernimmt, wirkt sich das bis auf die erzeugten Strings aus - das wäre unangenehm. Ähnliches gilt für Zwischenraumzeichen, die am Ende einer Zeile stehen, da diese nur selten sichtbar sind und deren Übernahme in den String leicht Verwirrung stiften kann.

Golem Akademie
  1. Advanced Python - Fortgeschrittene Programmierthemen
    3./4. Mai 2021, online
  2. IT-Sicherheit für Webentwickler
    31. Mai - 1. Juni 2021, online
Weitere IT-Trainings

Deswegen normalisiert der Compiler Zeilenenden, indem er alle Zwischenraumzeichen nach dem letzten anderen Zeichen entfernt und alle Zeilenumbruchkombinationen (also \r, \r\n und \n) durch \n ersetzt. Da Escape-Sequenzen normal ausgewertet werden (und zwar nach dieser Normalisierung), kann man CRLF erzeugen, indem man Zeilen mit der Sequenz \r enden lässt:

  1. String windows = """
  2. Windows\r
  3. line\r
  4. endings\r
  5. """

Spannender und ein wenig komplizierter als bei Zeilenenden wird es bei der Einrückung. Hier müssen Entwickler und Compiler zwischen nebensächlicher und absichtlicher Einrückung unterscheiden: Die Einrückung des Codes aufgrund der Formatierung sollte keine Auswirkungen auf den erstellten String haben - sie ist nebensächlich. Darüber hinausgehende Einrückung sollte aber als absichtlich erkannt werden und sich im Ergebnis wiederfinden.

Bitte aktivieren Sie Javascript.
Oder nutzen Sie das Golem-pur-Angebot
und lesen Golem.de
  • ohne Werbung
  • mit ausgeschaltetem Javascript
  • mit RSS-Volltext-Feed
 Programmiersprache: Java 13 bringt mehrzeilige Strings mit TextblöckenEinrückung und Formatierung der Textblöcke 
  1.  
  2. 1
  3. 2
  4. 3
  5. 4
  6.  


Anzeige
Spiele-Angebote
  1. 2,79€
  2. 39,99€
  3. 3,90€

sambache 23. Sep 2019

Kurven und Graphen sind die Visualisierung von Zahlen. Symbole sind Strings der Länge 1...

Sybok 19. Sep 2019

Ach von Perl kommt es. OK, gut zu wissen. Für Murks halte ich es dennoch nicht, wenn es...

Sybok 19. Sep 2019

Ganz ehrlich: Ohne mich weiter informiert zu haben sagt mir mein Bauchgefühl auch, dass...

hl_1001 18. Sep 2019

Danke, stimmt. Habe auch bei meinem Umstieg von Java auf C# bald gesehen wie weit hinten...

CSCmdr 18. Sep 2019

Würde vielleicht helfen, ein paar Zeilenumbrüche mit entsprechenden Einrückungen zu...


Folgen Sie uns
       


Audi E Tron GT Probe gefahren

Der E-Tron GT ist die Oberklasse-Limousine von Audi. Golem.de ist das Elektroauto Probe gefahren.

Audi E Tron GT Probe gefahren Video aufrufen
Programm für IT-Jobeinstieg: Hoffen auf den Klebeeffekt
Programm für IT-Jobeinstieg
Hoffen auf den Klebeeffekt

Aktuell ist der Jobeinstieg für junge Ingenieure und Informatiker schwer. Um ihnen zu helfen, hat das Land Baden-Württemberg eine interessante Idee: Es macht sich selbst zur Zeitarbeitsfirma.
Ein Bericht von Peter Ilg

  1. Arbeitszeit Das Sechs-Stunden-Experiment bei Sipgate
  2. Neuorientierung im IT-Job Endlich mal machen!
  3. IT-Unternehmen Die richtige Software für ein Projekt finden

Weclapp-CTO Ertan Özdil: Wir dürfen nicht in Schönheit und Perfektion untergehen!
Weclapp-CTO Ertan Özdil
"Wir dürfen nicht in Schönheit und Perfektion untergehen!"

Der CTO von Weclapp träumt von smarter Software, die menschliches Eingreifen in der nächsten ERP-Generation reduziert. Deutschen Perfektionismus hält Ertan Özdil aber für gefährlich.
Ein Interview von Maja Hoock


    Fiat 500 als E-Auto im Test: Kleinstwagen mit großem Potenzial
    Fiat 500 als E-Auto im Test
    Kleinstwagen mit großem Potenzial

    Fiat hat einen neuen 500er entwickelt. Der Kleine fährt elektrisch - und zwar richtig gut.
    Ein Test von Peter Ilg

    1. Vierradlenkung Elektrischer GMC Hummer SUV fährt im Krabbengang seitwärts
    2. MG Cyberster MG B Roadster mit Lasergürtel und Union Jack
    3. Elektroauto E-Auto-Prämie übersteigt in 2021 schon Vorjahressumme

      •  /