Ceci provient de la section sur les ensembles dans les génériques et collections Java. L'exemple suivant est donné pour illustrer comment calculer une hashcode pour cordes:Quelle est la priorité d'opérateur de l'opérateur * = dans Java?
int hash = 0;
String str = "The red fox jumped over the fence";
/** calculate String Hashcode **/
for (char ch: str.toCharArray()){
// hash *= 31 + ch; this evaluates to 0 ????
hash = hash * 31 + ch;
}
p("hash for " + str + " is " + hash);
hachage pour « Le renard roux sauté par-dessus la clôture » est 1153233987386247098. Cela semble être correct. Cependant, si j'utilise la notation abrégée, * =, j'obtiens 0 pour la réponse.
int hash = 0;
String str = "The red fox jumped over the fence";
/** calculate String Hashcode **/
for (char ch: str.toCharArray()){
hash *= 31 + ch;
// hash = hash * 31 + ch;
}
p("hash for " + str + " is " + hash);
hachage pour « Le renard roux sauté par-dessus la clôture » est 0
Je suis curieux de savoir comment la priorité opérateur est évaluée à l'aide du * = opérateur ?
[La priorité de '' * = (et toutes les autres missions opérateurs) est la même que pour '='] (https://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html). C'est pourquoi il fait l'addition avant la multiplication et vous obtenez zéro. –
https://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html –