1. Java eingebaute Unterstützung für Saiten;
Die sogenannte integrierte Unterstützung bedeutet, dass String-Typen nicht mit char-Zeigern wie C implementiert werden, und die String-Codierung von Java entspricht den Unicode-Codierungsstandards, was auch bedeutet, dass sie nicht mit String- und WSTRing-Klassen wie C ++ implementiert werden muss Seien Sie mit C -Sprache und Unicode -Standard kompatibel. Java unterstützt String -Typen in der String -Klasse intern.
Dies bedeutet: Wir können die gleiche Methode direkt wie das String -Objekt aufrufen:
// Sie können alle Methoden des String -Objekts auf "ABC" direkt aufrufen
int länge = "abc" .Length ();
sowie
String ABC = New String ("ABC");
int länge = abc.length ();
2. Der Stringwert in Java ist konstant (konstant)
Wir meinen hier, dass der Wert nach dem Erstellen des String -Typs nicht geändert werden kann. String ("def") Der "ABC" und "def" im konstanten Pool, der in der virtuellen Java -Maschine gespeichert ist.
Der "ABC" im folgenden Code wird im konstanten Pool gespeichert, sodass die Adressen durch Variablen A und AB im konstanten Pool gleich "ABC" sind.
Die Codekopie lautet wie folgt:
öffentliche Klasse StringTest {
public static void main (String [] args) {
Zeichenfolge a = "ABC";
String AB = "ABC";
String ABC = New String ("ABC");
System.out.println (ab == a);
System.out.println (a == ABC);
}
}
/*Programmausgabe:
* WAHR
* FALSCH
* *//
Wie werden dynamisch erzeugt und variable Zeichenfolgen implementiert? Java bietet StringBuffer- und StringBuilder -Klassen, um diese Anforderung zu erreichen Werden StringBuilder und StringBuffer implementiert? Es speichert Strings durch ein Charakter -Array. Das Folgende ist ein Ausschnitt aus dem Quellcode, der mit JDK geliefert wird.
3.. Codierungsprobleme in Saiten.
Zwei Fragen zu verstehen: Wie kann man mit String -Codierung in Quelldateien umgehen? Welche Codierung verwenden Zeichenfolgen beim Kompilieren in Klassendateien oder Code im Java Virtual Machine?
Das erste Problem ist, dass die Zeichenfolgecodierung im Quellcode von Ihrer IDE oder Ihrem Texteditor abhängt. Zum Beispiel wird der folgende Code im GBK-Codierungsformat bearbeitet und dann mit UTF-8 und GBK-Dekodierung geöffnet
// GBK -Codierungsformat, im GBK -Format geöffnet
// GBK-Codierungsformat, im UTF-8-Format geöffnet, verstümmelt;
Wie kann man also mit dieser Art von Quellcode -Codierungsproblem umgehen? Die Antwort wird in der Parameteroption -Codierung des Compiler Javac angegeben. Die Standardcodierung von Windows ist im Allgemeinen GBK (dieser Wert kann über System.getProperty ("Datei.Coding") erhalten werden). Verwenden Sie Javac -coding utf- 8 kompilieren.
Was ist die Codierung von Strings beim Kompilieren einer Klassendatei oder einem Code, wenn ein Java-Virtual-Computer ausführt? Wie wird die Quellcode-Codierung in Java-Virtual-Maschinen mithilfe der UTF-16-Codierung implementiert. Dies bedeutet, dass die Zeichenfolgen in der Laufzeit- oder Klassen -Bytecode -Datei, solange der Compiler Javac die Codierung von Zeichenfolgen in der Quellcode -Datei korrekt versteht, unabhängig vom Codierungsformat im Quellcode sind. Hier können wir den grundlegenden Charakter-Typ oder die Charakterklasse in Java weiter verstehen. Die Länge der Charaktere oder chinesischen Charaktere in Java beträgt 16 Bit.
Darüber hinaus verwenden wir im String-Typ auch die angegebene Codierung des festen Zeichens, um die zugrunde liegende binäre Darstellung und Zeichenfolge zu konvertieren, was bedeutet, dass wir die GBK-Codierung, die UTF-8-Codierung oder andere codierte Textdateien oder andere Eingabestreams korrekt lesen können. Der Eingabestream konvertiert Es in die richtige Zeichenfolge im Speicher.
Beispielsweise gibt es in der String -Klasse die folgenden Methoden:
öffentliche Zeichenfolge (Byte [] Bytes, charSet charSet);
öffentliches Byte [] GetBytes (charset charset) spezifiziert den Charakter -Set -Codierungstyp und konvertiert die Zeichenfolge in ein Byte -Array, dh die binäre Darstellung der Zeichenfolge.
Es gibt eine andere Mitgliedermethode, auf die geachtet werden muss:
öffentliches Byte [] getBytes ();