[解決済み] Java文字列のhashCode()の整合性
2022-05-16 20:46:11
質問
Java文字列のhashCodeの値は、次のように計算されます。 文字列.hashCode() ):
s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
以下の式がfalseと評価されるような状況(JVMのバージョン、ベンダーなど)はありますか?
boolean expression = "This is a Java string".hashCode() == 586653468
更新その1です。 もしあなたが、答えは「はい、そのような状況もあります」と言うのであれば、「これはJavaの文字列です」(".hashCode() != 586653468) という具体例を示してください。なるべく具体的な例を挙げてください。
更新その2。 私たちは皆、hashCode()の実装の詳細に依存することが一般的に悪いことだと知っています。しかし、私は特に String.hashCode() について話しているので、答えを String.hashCode() に集中させておいてください。Object.hashCode()は、この質問の文脈ではまったく無関係です。
どのように解決するのですか?
Java 1.2までさかのぼったドキュメントを見ることができます。
というのは事実ですが
一般に
はハッシュコードの実装が同じままであることを信頼すべきではありませんが、現在では、ハッシュコードの実装が同じであることを信頼することができます。
java.lang.String
の動作として文書化されているので、それを変更することは既存の契約を破ることになります。
可能な限り、バージョン間で同じであるハッシュコードに頼るべきではありませんが、私の考えでは
java.lang.String
は特別なケースだと思います。
があるためです。
もちろん、アルゴリズムが指定される前のリリースとの互換性を放棄している限りにおいて、です。
関連
-
Eclipseプロンプトを実行する java仮想マシンを使用しない
-
ブラウザでの大容量ファイルスライスアップロード(Javaサーバサイド実装)
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] JavaでNullPointerExceptionを回避する方法
-
[解決済み] なぜパスワードにはStringではなくchar[]が好まれるのですか?
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
-
[解決済み】JavaScriptで文字列の出現箇所をすべて置換する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
IllegalArgumentException この例外を解決する方法
-
undefinedeclipse エラー。この行に複数のアノテーションが見つかりました: - 文字列を型解決に解決できない
-
jd-gui Java Exceptionが発生しました。
-
スキャナは、タイプに解決することはできません最もルーキー初心者の質問
-
Intellij IDEAのエラー「CreateProcess error=2, system could not find specified file」に対する完璧な解決策です。
-
node js npm gruntインストール、elasticsearch-head 5.Xインストール
-
が 'X-Frame-Options' を 'deny' に設定しているため、フレーム内にある。
-
javaでクラスを作成すると、enclosing classでないように見える
-
Javaエラーメッセージがenclosingクラスでない
-
起動時にEclipseエラーが発生しました。起動中に内部エラーが発生しました。java.lang.NullPoin: "Javaツーリングの初期化 "中に内部エラーが発生しました。