Menschen, Sie zu vergessen, dass der Prozess Literalzeichenfolgen im Pool des Vergebens ist „Internierung“ genannt. Die Klasse String hat eine Methode namens intern(). Diese Methode fügt eine Zeichenfolge in den Pool ein, auch wenn sie anfangs nicht im Pool ist (nicht literal). Dies bedeutet, dass Code wie folgt:
String a = "hello";
String b = new String("hello");
b = b.intern();
System.out.println(a == b);
gedruckt wird "true
". Nun, warum sollte jemand das brauchen? Wie Sie sich vorstellen können, kann der String-Vergleich a.equals(b)
lange dauern, wenn die Strings die gleiche Länge haben, sich aber nahe am Ende unterscheiden. (Schauen Sie sich einfach den .equals() Quellcode an.).
Der direkte Vergleich von Referenzen ist jedoch der gleiche wie der Vergleich von Ganzzahlen (Zeiger in C-Sprache), die fast augenblicklich ist.
Also, was gibt dir das? Geschwindigkeit. Wenn Sie die gleichen Strings viele, viele Male vergleichen müssen, wird Ihre Programmleistung enorm profitieren, wenn Sie diese Strings internieren. Wenn Sie jedoch Strings nur einmal vergleichen, wird es keinen Leistungsgewinn geben, da der Internierungsprozess selbst equals() verwendet.
Ich hoffe, dies erklärt dies.
danke
Sind Sie sicher, dass Sie '==' oder '=' ?? –
Geändert ein Codebeispiel, sorry – Eugene
Stellen Sie sicher, dass die Sprache JAVA ist. Andere Sprachen haben andere Implementierungen. Was auch immer der == Operator für .net ist. – CodingBarfield