>Que ceux qui font un toto = new String( "TOTO" ) au lieu de
>toto = "TOTO" me disent pourquoi.
Pour avoir des r�f�rences diff�rentes ?
>Le code suivant fait exactement la m�me chose (en plus rapide) :
Heeuuuu. non pas vraiment ! Enfin ca fait pas le meme chose ! Mais la
deuxieme est effectivement plus rapide, mais partage les r�f�rences.
String str = "TOTO"; L'object str � �t� creer durant l'initialization de
la class. c'est un genre d'oject static ( static pool )
String str = new String("TOTO"); Cela cre� une copie d'une string du static
pool de la class.
--> Donc
Si dans une meme class "STR" == "STR", "STR" != new String("STR") et bien
sur new String("STR") est diff�rent de new String("STR")
C'est pas tres clair, mais ...
>- Le intern() est beaucoup plus long que le equals, donc pas
>besoin de l'utiliser si c'est uniquement pour faire 1 seul ==. Par
>contre, dans une boucle tr�s longue, ca peut �tre int�ressant.
Par ex un tableau de 2000 String a comparer avec 2000 autres string. -->
2000 * 2000 comparaison !
Via des equals ==> 461 ms
Via des intern & == 30 ms dont 10 ms pour les interns. Y pas photo.
Pour par example un algo de type 'buble sort" c'est interessant, pas pas
pour un quick sort.
Un intern prend 8 X plus de temps qu'un equals.
Dominique
|---------+---------------------------->
| | OLIVIER CAYRON |
| | <[EMAIL PROTECTED]|
| | rfi.fr> |
| | |
| | 10/03/2003 11:25 |
| | Please respond to|
| | java |
| | |
|---------+---------------------------->
>-------------------------------------------------------------------------------------------------------------------------------|
|
|
| To: "'[EMAIL PROTECTED]'" <[EMAIL PROTECTED]>
|
| cc: (bcc: Dominique Gallot/BRU/MASTERCARD)
|
| Subject: RE: String.intern()
|
>-------------------------------------------------------------------------------------------------------------------------------|
public String intern() interns a String in the common string
> memory pool. Example: String potentialNapoleanQuote =
> new String ("Able was I, ere I saw Elba!"); potentialNapoleanQuote.intern
();.
Attention, il ne faut pas trop regarde ce code � 2 balles ?
Que ceux qui font un toto = new String( "TOTO" ) au lieu de
toto = "TOTO" me disent pourquoi. Le code suivant fait exactement
la m�me chose (en plus rapide) :
String potentialNapoleanQuote = "Able was I, ere I saw Elba!";
> Il appara�t donc que prefix.intern() permet d'ajouter une cha�ne
> dans le pool de cha�nes sauvegard� en interne et d'acc�l�rer ensuite
> la comparaison de deux cha�nes en utilisant l'op�rateur == plut�t que
> la m�thode equals().
C'est exactement cela. Cependant, � retenir :
- Le intern() est beaucoup plus long que le equals, donc pas
besoin de l'utiliser si c'est uniquement pour faire 1 seul ==. Par
contre, dans une boucle tr�s longue, ca peut �tre int�ressant.
- Les literaux sont automatiquement inclus dans le pool,
donc ne pas faire "TOTO".intern().
- Dans l'exemple original, faire un intern pour ensuite faire
des equals me parait bien inutile.
- Pour r�pondre � la question initiale, non, ca ne change rien car
le get d'une HashMap (c'est l'exemple que j'ai regard� pour v�rifier)
utilise le hashcode et le equals.
Olivier
**********************************************************************
This email and any files transmitted with it are confidential and
intended solely for the use of the individual or entity to whom they
are addressed. If you have received this email in error please notify
the system manager.
This footnote also confirms that this email message has been swept by
MIMEsweeper for the presence of computer viruses.
www.mimesweeper.com
**********************************************************************