Was ist der Unterschied zwischen CharSequence[]
und String[]
?
Was ist der Unterschied zwischen CharSequence[] und eine Zeichenfolge[]?
Brigadegeneral
Thierry-Dimitri Roy
Schnur implementiert die Zeichenfolge Schnittstelle. CharSequence wird von String implementiert, aber auch von CharBuffer, Segment, StringBuffer, StringBuilder.
Also eine Schnur[] und eine CharSequence[] ist im wesentlichen gleich. Aber CharSequence ist die Abstraktion und String ist die Implementierung.
Übrigens, ‘[]’ bezeichnet ein Reihe von Objekten. So String[]
ist ein Array von Strings. Und String selbst ist ein Array von Zeichen.
-
In Java ist String nicht gerade ein Array von Zeichen. Die Zeichen werden in einem Array gespeichert, aber Sie erhalten nie Zugriff, um sicherzustellen, dass String unveränderlich ist.
– Matej ‘Yin’ Gagyi
7. Mai 2016 um 0:41 Uhr
CharSequence
stellt eine Schnittstelle zu einer Folge von Zeichen dar, mit Operationen, die allen Klassen gemeinsam sind, die sie implementieren. Jedoch insbesondere CharSequence
übernimmt keine Garantie dafür, ob die Sequenz veränderlich ist oder nicht. Sie können also eine unveränderliche Implementierungsklasse haben, z String
oder veränderliche, wie StringBuilder
und StringBuffer
.
Zusätzlich, CharSequence
verfeinert nicht die Allzweckimplementierungen des equals()
oder hashCode()
Methoden, daher gibt es keine Garantie, dass Objekte verschiedener Klassen implementiert werden CharSequence
werden als gleich verglichen, selbst wenn die zugrunde liegende Sequenz, die sie enthalten, dieselbe ist. Also gegeben:
String seq1 = "hello";
StringBuilder seq2 = new StringBuilder("hello");
StringBuffer seq3 = new StringBuffer("hello");
Vergleiche zwischen diesen drei mit .equals()
Rückkehr false
auf Java 1.6, aber ich kann keine Garantien dafür finden, dass sich dies in Zukunft nicht ändern wird (obwohl es wahrscheinlich ziemlich unwahrscheinlich ist).
Und CharSequence[]
und String[]
sind nur Arrays ihrer jeweiligen Typen.
BEARBEITEN: Das praktische Ergebnis davon ist zu vergleichen CharSequence
s für Gleichheit müssen Sie ihre verwenden toString()
Methode und vergleiche das Ergebnis String
s, da dies garantiert zurückkehrt true
wenn die zugrunde liegenden Sequenzen gleich sind.
Eine CharSequence ist eine Schnittstelle. String ist eine unveränderliche Folge von Zeichen und implementiert die CharSequence-Schnittstelle. Zeichenfolge[] und Saite[] sind nur Arrays von CharSequence bzw. String.
Das bedeutet, wo immer Sie CharSequence sehen, können Sie ein String-Objekt übergeben.
Basil Bourque
Hier ist mein Diagramm, das zeigt, wie String
ist eine von mehreren konkrete Klassen Umsetzung der CharSequence
Schnittstelle.
Im Speziellen, StringBuilder
wird häufig als schnellere Alternative zur Verkettung verwendet String
Gegenstände mit +
-Operator, bei dem Thread-Sicherheit nicht erforderlich ist.
Die eckigen Klammern bedeuten ein Array. So, String[]
ist ein Array von String
Objekte und CharSequence[]
ist ein Array von Objekten, die sein können oder nicht String
Objekte sind aber definitiv Objekte, die die implementieren CharSequence
Schnittstelle.
Siehe meine Antwort hier und meine Antwort hier für viel mehr Diskussion.
CharSequence ist eine Schnittstelle. String ist eine Klasse, die die Schnittstelle CharSequence implementiert. Das bedeutet, dass ein String-Objekt als CharSequence-Objekt durchgeht. Es gibt verschiedene Klassen, die die CharSequence-Schnittstelle implementieren. Sie alle definieren die Methoden, die mit den Methodensignaturen (oder abstrakten Methoden?) korrelieren, die die Schnittstelle CharSequence bereitstellt.
Grant Miller
String ist die übergeordnete Klasse, die die Schnittstelle implementiert CharSequence
.
Es gibt andere Klassen, die ebenfalls die implementieren CharSequence
wie StringBuffer
, StringBuilder
etc.
Igor
Zeichenfolge stellt einen geordneten Satz von Zeichen dar und definiert Methoden zum Untersuchen dieses Zeichensatzes. Es ist eine Schnittstelle, und eine Implementierung dieser Schnittstelle ist Schnur Klasse.
Weitere Informationen finden Sie in der Java-API-Dokumentation. Auch dieses Tutorial könnte Ihnen helfen: http://download.oracle.com/javase/tutorial/
-
Ein “geordneter Satz von Zeichen” würde bedeuten, dass dasselbe Zeichen nicht zweimal vorkommen kann.
– Michael Borgwardt
30. August 2010 um 13:45 Uhr
-
Ich denke, sein Kommentar soll zwischen Groß- und Kleinschreibung unterscheiden. Er hat nicht ‘Set’ gesagt, oder?
– Igor Soudakevitch
12. Mai 2016 um 7:55 Uhr
Vielleicht möchten Sie ein Java-Tag hinzufügen. Oder jemand mit genug Repräsentanten kann es tun.
– Codierbenutzer
30. August 2010 um 13:19 Uhr
Sehen Gültig für Java 2nd Edition, Item 52: Verweisen Sie auf Objekte über ihre Schnittstellen.
String
ist einclass
,CharSequence
ist eininterface
(dasString
und ein paar andere implementieren).CharSequence[]
ist flexibler. Das gesagt, Punkt 25: Bevorzugen Sie Listen gegenüber Arrays.– polygenelubricants
30. August 2010 um 16:20 Uhr
mögliches Duplikat von CharSequence VS String in Java?
– Basilikum Bourque
1. Juli 2015 um 18:33 Uhr