String- und Zeichen-Array in Java

8

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.

    
iluvthee07 20.08.2013, 15:09
quelle

6 Antworten

15

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 .

    
Ravi Thapliyal 20.08.2013, 15:12
quelle
2

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.

    
Philipp Sander 20.08.2013 15:11
quelle
2

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.

    
Santosh Kumar 21.11.2017 13:13
quelle
1

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.
  • Sie müssen sich niemals selbst mit der Beendigung von Strings befassen.
  • Java hat eine spezielle Ausnahme für die Regel "kein Operatorüberladen", um die Verkettung von Strings zu unterstützen (mit + ).

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.

    
chrylis 20.08.2013 15:15
quelle
1

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.

    
Peter Walser 20.08.2013 15:25
quelle
0

Der Vorteil der Verwendung des String-Objekts sind alle verfügbaren Methoden. Zum Beispiel:

%Vor%     
itsNotABlanket 20.08.2013 15:17
quelle

Tags und Links