metode hashCode de String ... je comprend pas !

metode hashCode de String ... je comprend pas ! - Programmation

Marsh Posté le 28-07-2002 à 14:44:03    

salut tout le monde.
 
Je viens de regarder le code source de la classe String et y a un truc que je capte pas dans l'implémentation de la méthode HashCode.
 
voici son code (jdk 1.3) :  

Code :
  1. public int hashCode() {
  2. int h = hash;
  3. if (h == 0) {
  4.     int off = offset;
  5.     char val[] = value;
  6.     int len = count;
  7.     for (int i = 0; i < len; i++)
  8.  h = 31*h + val[off++];
  9.     hash = h;
  10. }
  11. return h;
  12.     }


 
la question que je me pose c'est : à quoi ca sert de déclarer les variables val et len ??? pourquoi ne pas avoir tout simplement utilisé les variables value et count ??? Les objets String sont immuables, donc de toute façon les valeurs de ces variables ne changerons pas.  
Doit bien y avoir une raison ...
 
pkoi ne pas avoir écrit tout simplement ca :  

Code :
  1. public int hashCode() {
  2. int h = hash;
  3. if (h == 0) {
  4.     int off = offset;
  5.     for (int i = 0; i < count; i++)
  6.  h = 31*h + value[off++];
  7.     hash = h;
  8. }
  9. return h;
  10.     }


 
alors, y a un truc bête qui m'échappe ?

Reply

Marsh Posté le 28-07-2002 à 14:44:03   

Reply

Marsh Posté le 28-07-2002 à 15:41:31    

Allez, je prends un risque :
 
si tu as une autre classe qui appelle cette methode pendant qu'il est en train de calculer ta hashcode, n'y a t-il pas un risque, meme infime, que value puisse changer ?  
 
donc a ce moment la, en le stockant dans une variable locale, tu n'as plus le risque de voir ta variable value changer.
 
Et un essai, un :)

Reply

Marsh Posté le 28-07-2002 à 16:06:56    

pas bete. De plus synchronized sur une String ... bof


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 28-07-2002 à 17:28:05    

alien_nan a écrit a écrit :

Allez, je prends un risque :
 
si tu as une autre classe qui appelle cette methode pendant qu'il est en train de calculer ta hashcode, n'y a t-il pas un risque, meme infime, que value puisse changer ?  
 
donc a ce moment la, en le stockant dans une variable locale, tu n'as plus le risque de voir ta variable value changer.
 
Et un essai, un :)




ben non ... pourquoi ca changerait ? String est immuable !
et puis en plus, si value change, val va changer aussi puiqu'ils pointent tous les deux sur le même objet ...

Reply

Marsh Posté le 28-07-2002 à 17:28:21    

DarkLord a écrit a écrit :

pas bete. De plus synchronized sur une String ... bof




:??: hein ?

Reply

Marsh Posté le 28-07-2002 à 18:51:19    

vraiment ... personne a d'idée ???
ils devaient bien avoir une raison les dev de chez sun !!

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed