Java erstellt eine Instanz einer Zeichenfolge sogar für eine einzelne Zeichenfolge. Die folgenden Ausdrucke java.lang.String
:
"c"
ist ein String
literal. Es repräsentiert String
, genauso wie "foo"
für String
steht.
Es gibt keine spezielle Behandlung von Zeichen mit einem Zeichen String
(nicht einmal von 0-Buchstaben String
literal ""
).
Wer Ihnen gesagt hat, dass es anders behandelt wird, war entweder a.) falsch oder b.) Sprechen über etwas anderes (eine Bibliothek, die zum Beispiel eine spezielle Behandlung hat).
"c"
erstellt ein Objekt. Wenn Sie das Literal jedoch irgendwo im Quellcode erneut zuweisen, wird kein neues Objekt erstellt, sondern auf das erste erstellte Zeichenfolgenobjekt verwiesen.
Zum Beispiel:
%Vor%Sowohl s1 als auch s2 sind demselben Objekt zugewiesen, und == würde funktionieren.
Sie können hier mehr lesen: Ссылка
Vielleicht war gemeint, dass die unter der Haube Fliehgewichte erstellt werden (weiß nicht, wie das mit Java funktioniert, aber ich vermute, dass dieses Konzept auf einer gewissen Ebene für Strings eingesetzt wird)
String
speichert Zeichen als char[]
, daher wird "c"
höchstwahrscheinlich als new char[] { 'c' }
im Objekt String
dargestellt.
Da die String
-Klasse final
ist, bedeutet dies, dass es keine Unterklasse gibt, die Zeichenfolgen mit einem einzelnen Zeichen in einem char c
-Feld speichert.
Außerdem gibt es kein Konzept zum automatischen Boxen / Unboxing für ein einzelnes Zeichen String
bis char
- soweit es dokumentiert ist, also kann man davon ausgehen, dass Single-Character-Strings ähnlich gespeichert werden jede andere Art von String.
Wie bei den meisten Dingen in der Programmierung sehen Sie sich die Quelle an - & gt; java.lang.String.
Alle Strings sind Instanzen von java.lang.String, es gibt keinen speziellen Fall. Jeder java.lang.String enthält ein char [] und einige Ganzzahlen, die den Start- und Endindex enthalten. Beachten Sie, dass char [] zwischen Strign-Instanzen gemeinsam genutzt wird, zB wenn ein StringString () das ursprüngliche char [] nicht geklont oder kopiert wird, wird es geteilt, aber die Start- / Ende-Indizes werden aktualisiert.
Tags und Links java