1. Erstens gehört String nicht zu den 8 Grunddatentypen.
Da der Standardwert eines Objekts null ist, ist der Standardwert von String ebenfalls null, aber es handelt sich um ein spezielles Objekt und weist einige Eigenschaften auf, die andere Objekte nicht haben.
2. new String() und new String("") deklarieren beide einen neuen leeren String, der kein Null ist.
3. Der Unterschied zwischen
String str=new String („kvill“);:
Hier reden wir nicht über den Heap oder den Stack, wir führen einfach die Konstante ein Pool-First-Konzept.
Der Konstantenpool bezieht sich auf einige Daten, die während der Kompilierung ermittelt und in der kompilierten .class-Datei gespeichert werden. Es umfasst Konstanten in Klassen, Methoden, Schnittstellen usw. sowie String-Konstanten.
Sehen Sie sich Beispiel 1 an:
String s0=”kvill”; String s1=”kvill”; String s2=”kv” + “ill”; System.out. print ln( s0==s1 ); System.out.println( s0==s2 );
Das Ergebnis ist:
true true
Zuerst müssen wir wissen, dass Java dies tut Stellen Sie sicher, dass eine String-Konstante nur eine Kopie hat.
Da „kvill“ in s0 und s1 im Beispiel beide String-Konstanten sind, werden sie zur Kompilierungszeit bestimmt, sodass s0==s1 wahr ist und „kv“ und „ill“ ebenfalls wahr sind alle String-Konstanten. Wenn ein String durch mehrere String-Konstanten verkettet ist, muss er selbst eine String-Konstante sein, daher wird s2 zur Kompilierungszeit auch in eine String-Konstante analysiert, sodass s2 auch ein Konstantenpool ist > von „kvill“. Daher kommen wir zu dem Schluss, dass s0==s1==s2; Die mit new String() erstellte Zeichenfolge keine Konstante ist und zur Kompilierungszeit nicht bestimmt werden kann, sodass die mit new String() erstellte Zeichenfolge keine enthält Konstanten Im Pool verfügen sie über einen eigenen Adressraum.
Sehen Sie sich Beispiel 2 an:
String s0=”kvill”; String s1=new String(”kvill”); String s2=”kv” + new String(“ill”); System.out.println( s0==s1 ); System.out.println( s0==s2 ); System.out.println( s1==s2 );
false false false
Anwendung von „kvill“. Wenn Sie dies verstehen, wissen Sie, warum dieses Ergebnis erzielt wird. 4. String.intern():
Noch ein Punkt: Der in der .class-Datei vorhandene Konstantenpool wird zur Laufzeit von der JVM geladen und kann erweitert werden. Die intern()-Methode von String ist eine Methode zum Erweitern des Konstantenpools. Wenn eine String-Instanz str die intern()-Methode aufruft, prüft Java, ob sich im Konstantenpool eine Stringkonstante mit demselben Unicode befindet, und gibt sie gegebenenfalls zurück seine Referenz. Wenn nicht, fügen Sie eine Unicode-Zeichenfolge gleich str in den Konstantenpool ein und geben Sie ihre Referenz zurück; es wird deutlich, wenn Sie sich Beispiel 3 ansehen
Beispiel 3:
String s0= “kvill”; String s1=new String(”kvill”); String s2=new String(“kvill”); System.out.println( s0==s1 ); System.out.println( “**********” ); s1.intern(); s2=s2.intern(); //把常量池中“kvill”的引用赋给s2 System.out.println( s0==s1); System.out.println( s0==s1.intern() ); System.out.println( s0==s2 );
false ********** false //虽然执行了s1.intern(),但它的返回值没有赋给s1 true //说明s1.intern()返回的是常量池中”kvill”的引用 true
Jemand sagte: „Verwenden Sie die Methode String.intern(), um eine String-Klasse zu speichern.“ zu einem globalen Wenn in der String-Tabelle die Unicode-Zeichenfolge mit demselben Wert bereits in dieser Tabelle vorhanden ist, gibt diese Methode die Adresse der Zeichenfolge zurück, die bereits in der Tabelle vorhanden ist. Wenn in der Tabelle keine Zeichenfolge mit demselben Wert vorhanden ist , Registrieren Sie Ihre eigene Adresse in der Tabelle. „Wenn ich die globale String-Tabelle als konstanten Pool verstehe, lautet sein letzter Satz: „Wenn die Tabelle keinen String mit demselben Wert enthält, registrieren Sie Ihre eigene Adresse in der Tabelle.“ ist falsch. :
Sehen Sie sich Beispiel 4 an:
String s1=new String("kvill"); String s2=s1.intern(); System.out.println( s1==s1.intern() ); System.out.println( s1+" "+s2 ); System.out.println( s2==s1.intern() );
false kvill kvill true
s1==s1.intern() ist falsch, was darauf hinweist, dass das ursprüngliche „kvill“ noch existiert;
s2 ist jetzt die Adresse von „kvill“ im Konstantenpool, also s2= =s1. intern() ist wahr.
5. Über equal() und ==:
Für String wird einfach verglichen, ob die Unicode-Sequenzen zweier Strings gleich sind. Wenn sie gleich sind, wird true zurückgegeben vergleicht zwei Strings, ob die Adressen der Strings gleich sind, das heißt, ob es sich um Verweise auf denselben String handelt.
6. Es gibt viel darüber zu sagen, dass String unveränderlich ist
Solange Sie wissen, dass sich eine String-Instanz nach ihrer Generierung nicht ändert, zum Beispiel: String str=" kv" +“ill“+“ „+“ans“; „kvill“ und speichern Sie es im Speicher und generieren Sie schließlich „kvill ans“ und weisen Sie die Adresse dieser Zeichenfolge str zu, da die „Unveränderlichkeit“ von String viele temporäre
Variablen
generiert Es wird empfohlen, StringBuffer zu verwenden, da StringBuffer veränderbar ist
[Verwandte Empfehlungen]
1. Kostenloses Java-Video-Tutorial
2. Eingehende Analyse der intern()-Methode in Java
3. JAVA Zusammenfassung der Erfahrungen mit der intern()-Methode
4. Was ist das Konzept der intern-Methode in Java
5 Analyse des Praktikanten in Java Die Funktion von ()
Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung von intern() im String-Objekt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!