Wenn Sie Ihre Strings fühlen viel Speicher belegen kann dann machen nicht sie statisch oder erklären sie wörtliche mit String. Da diese beiden in permgen Raum gespeichert werden und fast immer Müll gesammelt werden [es gibt Chance, aber schlank, Statik kann nie Müll gesammelt werden, wenn Sie nicht Ihren eigenen Klassenlader erstellt haben]. So erstellen String Operator new damit, dass im Heap erstellt werden und leicht Müll gesammelt werden, dh
String str = new String("long string");
EDIT:
Wie Strings gespeichert sind: http://www.ntu.edu.sg/home/ehchua/programming/java/J3d_String.html
EDIT:
Es gibt eine lange Diskussion darüber, wie der neue String funktioniert. Argument präsentiert ist, dass neue String 2 Objekte eins im Heap und eins im Pool erstellen wird. Das ist falsch, es ist standardmäßig nicht richtig und Sie können Java dazu zwingen, dies zu tun, indem Sie die interne Methode aufrufen.Um mein Argument zu unterstützen finden Sie die javadoc von Strin Klasse für intern Methode:
intern
public String intern() Gibt eine kanonische Darstellung für das String-Objekt. Ein anfangs leerer String-Pool wird privat von der Klasse String verwaltet. Wenn die interne Methode aufgerufen wird und der Pool bereits eine Zeichenkette enthält, die diesem String-Objekt entspricht, wie durch die Methode equals (Object) bestimmt, wird die Zeichenfolge aus dem Pool zurückgegeben. Andernfalls wird dieses String-Objekt zum Pool hinzugefügt und eine Referenz auf dieses Objekt String zurückgegeben.
Daraus folgt, dass für zwei beliebige Strings s und t, s.intern() == t.intern() ist wahr, wenn und nur wenn s.equals (t) wahr ist.
Alle literalen Zeichenfolgen und konstanten Konstantenausdrücke sind Interned. String-Literale wird in §3.10.5 der Java-Sprache Spezifikation definiert
Wie von oben doc zu sehen, dass, wenn neuer String immer ein Objekt im Pool erstellt dann intern Methode völlig nutzlos sein wird !! Auch logisch ergibt es keinen Sinn.
EDIT:
auch die Antwort für diesen Beitrag lesen: String pool creating two string objects for same String in Java
Ist die Abfrage unterschiedlich für jeden der kurzlebigen Objekte? –
Hängt davon ab, wie oft diese kurzlebigen Klassen erstellt werden und ob die Abfragen alle gleich sind –
Nein, alle gleich für alle Instanzen – user1405469