Ich bin ein Student, der gerade von C ++ nach Java gewechselt ist.
Was könnte in Java der Hauptgrund für die Definition separater Datentypen für Strings und Char-Arrays sein? Was ist der Unterschied zwischen den beiden?
Da ich nur C ++ studiert habe, hatte ich bis jetzt den Eindruck, dass sie dasselbe sind. Bitte klären Sie wenn möglich.
String
ist unveränderlich. Char
array ist nicht. Eine Zeichenkette wird mit einem Char-Array darunter implementiert, aber jedes Mal, wenn Sie versuchen, sie zu modifizieren (wie mit Verkettung, Ersetzen usw.), erhalten Sie ein neues String
-Objekt.
Also, String
verhält sich wie eine konstante Char
-Array aber kommt mit bestimmten syntaktischen Zucker, die sie auch sehr einfach zu bedienen macht. Zum Beispiel wurde der Operator +
auch als String-Verkettungsoperator überladen .
String ist eine Klasse in Java und bietet Ihnen Methoden und ist auch ein Objekt.
Ein String-Objekt ist ebenfalls unveränderbar.
Intern ist der Wert ein Char-Array.
String ist in Java unveränderlich und im String-Pool gespeichert. Sobald es erstellt wird, bleibt es im Pool, bis Müll gesammelt wird. Da String unveränderlich ist, ist das Protokollierungskennwort eine lesbare Zeichenfolge. Es besteht ein größeres Risiko, dass der Speicherabzug erzeugt wird, um das Kennwort zu finden.
wo Char-Array in Heap erstellt wird und Sie mit einigen Dummy-Werten überschreiben können.
In Java ist String
eine grundlegende Systemklasse, die im Wesentlichen eine char[]
enthält. Es gibt mehrere Gründe, warum für die meisten Anwendungen die Verwendung einer vollständigen Klasse dem direkten Umgang mit Arrays vorzuziehen ist:
String
s sind unveränderlich; Sobald Sie einen Verweis auf String
haben, wissen Sie, dass es sich nie ändern wird. String
s stellen nützliche Methoden zur Verfügung, die ein leeres Array nicht haben kann, z. B. length()
, und haben eine klar definierte Vergleichssemantik. +
). Im Wesentlichen ist es eine gute OO-Übung, eine Klasse zu verwenden, um das gewünschte Verhalten und die Datenstrukturen am selben Ort zu sammeln, und String
schließt ein Array von Zeichen mit den nützlichen Operationen, die Sie für eine Zeichenfolge ausführen möchten.
Es gibt einen semantischen Unterschied. Nur weil Daten auf die gleiche Weise gespeichert werden, bedeutet dies nicht, dass es sich um dasselbe handelt. Dates
und Amounts
können auch die gleiche interne Repräsentation haben ( long
für einen Zeitstempel oder Fixpunktbetrag von Bargeld), aber sie sind nicht gleich. Das Array char
könnte auch ein 16-Bit-Bild bedeuten.
Bei der Objektorientierung empfiehlt es sich, Objekte basierend auf ihren Eigenschaften zu modellieren und nicht nach der Art und Weise, wie sie ihre Daten intern speichern . Auf diese Weise können Sie die Daten einkapseln und den Zugriff mit Getter / Setter einschränken oder steuern (oder die Observer-Unterstützung steuern oder sogar die interne Repräsentation unveränderlich oder poolable machen) und geeignete Methoden für Ihre Objekte.
Der Vorteil der Verwendung des String-Objekts sind alle verfügbaren Methoden. Zum Beispiel:
%Vor%Tags und Links string java char primitive-types