Un altro punto correlato: è possibile utilizzare il pool costante per migliorare le prestazioni dei confronti tra stringhe in alcune circostanze, utilizzando il metodo String.intern()
.
Questo metodo restituisce l'istanza di String con lo stesso contenuto della stringa su cui è invocata dal pool di costanti String, aggiungendola se non è ancora presente. In altre parole, dopo aver usato intern()
, tutte le stringhe con gli stessi contenuti sono garantite per essere la stessa istanza di String l'una rispetto all'altra e come tutte le costanti String con tali contenuti, ovvero è possibile utilizzare l'operatore di uguale (==
).
Questo è solo un esempio, che non è molto utile per sé, ma illustra il punto:
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";
}
Questo piccolo trucco non vale la pena progettare il vostro codice intorno, ma vale la pena tenere a mente per il giorno in cui si nota un po 'più di velocità potrebbe essere sfruttato da un po' di codice sensibile alle prestazioni utilizzando l'operatore ==
su una stringa con un uso giudizioso di intern()
.
fonte
2015-09-18 12:48:19
@Joe direi lascia passare. [Jeff Atwood: "Ho imparato a smettere di preoccuparmi e ad amare (alcuni) la duplicazione. E dovresti farlo anche tu."] (Https://blog.stackoverflow.com/2010/11/dr-strangedupe-or-how-i- doppione appresa-smettere-preoccuparsi-e-amore /) – Mindwin
@Mindwin: Ciò non significa che dovremmo smettere di chiudere le domande come duplicate se lo sono davvero. In effetti, l'articolo di Jeff * incoraggia * noi a chiudere le domande come duplicati - perché questo è il modo di collegarli. –