問題タブ [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.
c - Cでintとfloatの関係比較は直接可能ですか?
私はVisualStudio6を使用しており、cで記述された古いコードがいくつかあります。コードが次のようになる問題を見つけました。
これは有効な比較ですか?実行時にフロートの割り当てが3.0000001であり、これが失敗する可能性はありますか?
java - equals() メソッドの最適化
equals()
メソッド (さらに言えば、メソッドも)compareTo()
は、パフォーマンスのホットスポットになる可能性があります (たとえば、高トラフィックでHashMap
)。これらの方法が必要であることが判明した場合に、これらの方法を最適化するために人々がどのようなトリックを採用したのか疑問に思っていました.
たとえば、IntelliJ IDEA は以下を生成します。
equals()
他に、優れたパフォーマンスのメソッドを作成するためのガイドラインになり得るものはありますか?
scala - HashSet で代替比較を使用する
HatTrie の一種で使用する HashSet[Array[Byte]] を作成しているときに、この問題に出くわしました。
どうやら、配列の標準的な equals() メソッドは同一性をチェックします。要素がセットに含まれているかどうかを確認するために .deepEquals() を使用する代替 Comparator を HashSet に提供するにはどうすればよいですか?
基本的に、このテストに合格したい:
Array[Byte] を別のオブジェクトにうまくラップすることはできません。それらがたくさんあるからです。この目的のために新しい HashSet 実装を書く以外に、私にできることはありますか?
java - なぜこれらは==であるが、 `equals()`ではないのですか?
Javaの扱い方==
やequals()
、その他の種類の数値については少し混乱しています。例えば:int
Integer
出力(多分あなたは最初にあなたの推測をするべきです):
X == Y
異なるオブジェクトであるため、コンパイルされないことが予想されます 。- 9がデフォルトでであり、1)がコンパイルさえされていないことを考えると、私は少し驚いて
Y == 9
います。を期待するメソッドにを入れることはできませんが、ここではそれらは等しいことに注意してください。true
int
int
Short
- これは2つと同じ理由で驚くべきことですが、もっと悪いようです。
x
とに自動ボックス化されているので、当然のことInteger
です。- 当然のことながら、異なるクラスのオブジェクトはであってはなりません
equal()
。 - 何??
X == y
ですtrue
が?X.equals(y)
_ 常により厳密にfalse
すべきではありませんか?==
equals()
誰かが私がこれを理解するのを手伝ってくれるなら、私はそれを感謝します。==とequals()はどのような理由でこのように動作しますか?
編集: この動作が-128から127までの整数の動作とは関係がないことを示すために、9を9000に変更しました。
2番目の編集: わかりました。このことを理解していると思われる場合は、念のため、次のことを検討する必要があります。
出力:
その理由は、私が理解している限りでは次のとおりです。
- 別のインスタンス、とても違う。
X
ボックス化されていない場合は同じ値なので、等しい。- 同じ値なので、等しい。
y
ボックス化するInteger
ことはできないので、等しくすることはできません。
c# - 完全なIEquatable実装リファレンスはありますか?
ここでのSOに関する私の質問の多くは、IEquatableの実装に関するものです。ナイーブな実装には多くの隠れたバグがあり、それについて私が見つけた記事はかなり不完全であるため、正しく実装することは非常に難しいことがわかりました。私は、以下を含まなければならない決定的な参照を見つけたり、書きたいと思っています。
- IEquatableを正しく実装する方法
- Equalsを正しくオーバーライドする方法
- GetHashCodeを正しくオーバーライドする方法
- ToStringメソッドを正しく実装する方法
- 演算子を正しく実装する方法==
- 演算子を実装する方法!=正しく
そのような完全な参照はすでに存在しますか?
PS:MSDNリファレンスでさえ私には欠陥があるようです
.net - ハッシュセットと、すべてのメンバーが同一のクラスの異なるインスタンス
myclass というクラスがあるとします。
私のコードには、myclass の 2 つのインスタンス、myclass1 と myclass2 があります。それらについてのすべては、(パブリックおよびプライベート)プロパティが同一であることです。
それらの両方を HashSet に追加しようとすると、両方または 1 つだけが追加されますか? 両方を追加したくない場合は、myclass 定義で equals を上書きできますか? HasSet はそれを使用する方法を知っていますか?
scala - ScalaのBigDecimalはequals/hashCodeコントラクトに違反していますか?
Ordered
trait
要求に応じて、Scalaのクラスのメソッドequals
はBigDecimal
順序と一致しています。ただし、ハッシュコードはラップされたものから取得されるだけなjava.math.BigDecimal
ので、equalsとは矛盾します。
これが既知の問題であるという言及は見つかりません。私は何かが足りないのですか?
comparison - nullをチェックして2つのオブジェクトを比較します
JDKには、2つのオブジェクトが等しいかどうかを比較し、nullを考慮したメソッドがありますか?このようなもの:
このメソッドを自分で書くのはばかげているようです。すでにどこかに存在している必要があると思うからです。
c++ - オブジェクトを別のオブジェクトと等しくする
そのうちの1つが宣言されているときに、2つのオブジェクトを互いに等しくすることができることを私は知っています。私は自分のプログラムでこれをテストしました。しかし、私が代入ステートメントを使いに行ったとき、それはびっくりしました。代入ステートメントを使用して2つのオブジェクトを互いに等しくすることはできますか、それとも1つのオブジェクトが宣言されているときにのみそれを行うことができますか?