Ein weiterer verwandter Punkt: Sie können den Konstantenpool verwenden, um unter bestimmten Umständen die Leistung von Zeichenfolgenvergleichen zu verbessern, indem Sie die String.intern()
-Methode verwenden.
Diese Methode gibt die Instanz von String mit dem gleichen Inhalt zurück wie die Zeichenfolge, aus der sie vom String-Konstantenpool aufgerufen wird, und fügt sie hinzu, wenn sie noch nicht vorhanden ist. Mit anderen Worten, nach der Verwendung von intern()
sind alle Zeichenketten mit demselben Inhalt garantiert die gleiche Zeichenketteninstanz und jede String-Konstanten mit diesen Inhalten, was bedeutet, dass Sie dann den Gleichheitsoperator (==
) verwenden können.
Dies ist nur ein Beispiel, das für sich allein ist nicht sehr nützlich, aber es zeigt den Punkt:
class Key {
Key(String keyComponent) {
this.keyComponent = keyComponent.intern();
}
public boolean equals(Object o) {
// String comparison using the equals operator allowed due to the
// intern() in the constructor, which guarantees that all values
// of keyComponent with the same content will refer to the same
// instance of String:
return (o instanceof Key) && (keyComponent == ((Key) o).keyComponent);
}
public int hashCode() {
return keyComponent.hashCode();
}
boolean isSpecialCase() {
// String comparison using equals operator valid due to use of
// intern() in constructor, which guarantees that any keyComponent
// with the same contents as the SPECIAL_CASE constant will
// refer to the same instance of String:
return keyComponent == SPECIAL_CASE;
}
private final String keyComponent;
private static final String SPECIAL_CASE = "SpecialCase";
}
Dieser kleine Trick Code entwerfen um nicht wert ist, aber es lohnt sich wenn man bedenkt, Für den Tag, an dem Sie etwas mehr Geschwindigkeit bemerken, könnte aus etwas leistungsfähigem Code mit Hilfe des ==
Operators auf einer Schnur mit kluger Verwendung intern()
gekökelt werden.
@Joe Ich würde sagen, lassen Sie es passieren. [Jeff Atwood: "Ich habe gelernt, aufzuhören, sich Sorgen zu machen und Duplikate zu lieben. Und das solltest du auch."] (Https://blog.stackoverflow.com/2010/11/dr-strangedupe- oder-how-i- erlernt-zu-stoppen-sorgen-und-liebes-duplikation /) – Mindwin
@Mindwin: Es bedeutet nicht, dass wir aufhören sollten, Fragen als Duplikate zu beenden, wenn sie wirklich so sind. In der Tat ermutigt uns Jeffs Artikel * dazu, Fragen als Duplikate zu schließen - weil das die Art ist, sie zu verlinken. –