これは、Javaジェネリックスとコレクションのセットに関するセクションから来ています。次の例は、文字列のハッシュコードを計算する方法を説明するために与えられますため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);
ハッシュ「赤いきつねはフェンスを飛び越えた」これは正しいように見える1153233987386247098. です。しかし、省略表記* =を使用すると、答えは になります。
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);
のハッシュ
0だから、私は* = 演算子を使用して評価する方法をオペレータの優先順位についての好奇心である「赤いキツネはフェンスを飛び越えましたか」?
[ '* ='の優先順位(および他のすべての割り当てを演算子)は '='](https://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html)と同じです。それが乗算の前に加算を行い、ゼロになる理由です。 –
https://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html –