問題タブ [equals]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
11 に答える
595062 参照

java - Java で equals と hashCode をオーバーライドする場合、どのような問題を考慮する必要がありますか?

equalsandをオーバーライドする際に考慮しなければならない問題/落とし穴は何hashCodeですか?

0 投票する
6 に答える
1222 参照

c# - 参照型の Equals() の「最適な」正規実装は何ですか?

参照型に Equals() を実装するのは、思ったより難しいです。私の現在の正規の実装は次のようになります。

これはすべてのコーナー(継承など)のケースをカバーしていると思いますが、間違っているかもしれません。皆さんはどう思いますか?

0 投票する
7 に答える
10863 参照

c# - 等しい演算子を書くときにnullを処理するための最良の方法

重複の可能性:
無限再帰なしで'=='演算子のオーバーロードでnullをチェックするにはどうすればよいですか?

オブジェクトの==演算子をオーバーロードするとき、私は通常次のように記述します。

反対するためにダウンキャストしない場合、関数はそれ自体に再帰しますが、より良い方法がないかどうか疑問に思う必要がありますか?

0 投票する
20 に答える
259600 参照

java - コレクションの hashCode メソッドの最適な実装

コレクションのメソッドの最適な実装をどのように決定しますかhashCode()(equals メソッドが正しくオーバーライドされていると仮定して)。

0 投票する
9 に答える
5668 参照

java - Java equals():反映するか反映しないか

この質問は、特に、多数のフィールドを持つオブジェクトのequals()メソッドのオーバーライドに関連しています。まず、この大きなオブジェクトは、オブジェクト指向の原則に違反せずに複数のコンポーネントに分割することはできないため、「xフィールドを超えるクラスはありません」と言っても役に立ちません。

次に、フィールドの1つが等しいかどうかを確認するのを忘れたときに、問題が発生しました。したがって、私のequalsメソッドは正しくありませんでした。それから私はリフレクションを使うことを考えました:

この投稿の目的は、必ずしもコードをリファクタリングすることではなく(これは、私が使用しているコードでもありません)、代わりに、これが良いアイデアであるかどうかについての入力を取得することです。

長所:

  • 新しいフィールドが追加されると、自動的に含まれます
  • このメソッドは、30ifステートメントよりもはるかに簡潔です。

短所:

  • 新しいフィールドが追加されると、それは自動的に含まれますが、これは望ましくない場合があります
  • パフォーマンス:これは遅くする必要があります。プロファイラーを分割する必要はありません。
  • 比較で無視する特定のフィールドをホワイトリストに登録するのは少し醜いです

何かご意見は?

0 投票する
7 に答える
1797 参照

java - オブジェクトのアドレスから hashCode() を計算する方法は?

Java にVertexは、Java3D クラスのサブクラスがありPoint3fます。座標の値に基づいてPoint3f計算するようになりましたが、私のクラスではより厳密にしたいと考えています。2 つの頂点が等しいのは、それらが同じオブジェクトである場合のみです。ここまでは順調ですね:equals()Vertex

これが の契約に違反していることはわかってequals()いますが、頂点を他の頂点と比較するだけなので、これは問題ではありません。

ここで、頂点を に配置できるようにするにHashMapは、hashCode()メソッドは と一致する結果を返さなければなりませんequals()。現在それを行っていますが、おそらく戻り値は のフィールドに基づいているため、同じ座標を持つPoint3f異なるオブジェクトに対してハッシュ衝突が発生します。Vertex

したがって、のフィールドhashCode()から計算するのではなく、オブジェクトのアドレスに基づいて を使用したいと思います。クラスがこれを行うことはVertex知っていますが、メソッドをオーバーライドするため、そのメソッドを呼び出すことはできません。ObjecthashCode()Point3f

だから、実際に私の質問は2つあります:

  • 私はそのような浅いものが欲しいequals()ですか?
  • はいの場合、ハッシュコードを計算するためのオブジェクトのアドレスを取得するにはどうすればよいですか?

編集:私は何かを考えました...intオブジェクトの作成時にランダムな値を生成し、それをハッシュコードに使用できます。それは良い考えですか?なぜだめですか)?

0 投票する
3 に答える
34411 参照

java - Java標準の「nullまたはequalの両方」の静的メソッドはありますか?

入力を節約してコードを明確にするために、次のメソッドの標準バージョンはありますか?

0 投票する
8 に答える
255210 参照

java - Java equals() メソッドをオーバーライドする - 機能しない?

今日、メソッドで興味深い (そして非常に苛立たしい) 問題に遭遇しましたequals()。これにより、十分にテストされたクラスと思われるものがクラッシュし、追跡に非常に長い時間がかかったバグが発生しました。

完全を期すために、私は IDE やデバッガーを使用していませんでした。古き良きテキスト エディターと System.out だけです。時間は非常に限られており、それは学校のプロジェクトでした。

とにかく -

オブジェクトArrayListBook含むことができる基本的なショッピングカートを開発していました。Cart のaddBook()removeBook()、およびメソッドを実装するために、 が. だから私は行きます -hasBook()BookCart

テストではすべて正常に動作します。6 つのオブジェクトを作成し、それらにデータを入力します。で多くの追加、削除、has() 操作を実行するCartと、すべて正常に動作します。私はあなたが持つことができるequals(TYPE var)equals(Object o) { (CAST) var }、それが機能していたので、あまり問題ではないと仮定したことを読みました.

その後、問題が発生しました。 Book クラス内からのみBookを含むオブジェクトを作成する必要がありました。他のデータは入力されません。基本的には次のとおりです。ID

突然、このequals(Book b)方法は機能しなくなりました。Cart適切なデバッガーがなく、クラスが適切にテストされ、正しいと仮定すると、これを追跡するのに非常に長い時間がかかりました。メソッドを次のように交換equals()した後:

すべてが再び機能し始めました。明らかにBookオブジェクトであるにもかかわらず、メソッドが Book パラメーターを取らないことにした理由はありますか? 唯一の違いは、同じクラス内からインスタンス化され、1 つのデータ メンバーだけで満たされているように見えました。私は非常に混乱しています。光を当ててください?

0 投票する
2 に答える
510 参照

java - HashCode なしのエラー、Equals eclipse

プロジェクト内のクラスが hashCode または equals メソッドを実装していないかどうかを教えてくれる、非常に具体的な Eclipse プラグインを探しています。

そのようなプラグインを知っている人はいますか?

ありがとう

0 投票する
78 に答える
701988 参照

javascript - 2 つの JavaScript オブジェクトが等しいかどうかを判断する方法は?

厳密な等価演算子は、2 つのオブジェクトタイプが等しいかどうかを示します。しかし、 Javaのハッシュ コード値のように、2 つのオブジェクトが等しいかどうかを判断する方法はありますか?

スタック オーバーフローの質問JavaScript には任意の種類の hashCode 関数がありますか? この質問に似ていますが、より学術的な回答が必要です。上記のシナリオは、それが必要な理由を示しており、同等のソリューションがあるかどうか疑問に思っています。