[解決済み] equals(Object obj)って何するの?
2022-03-03 15:59:01
質問
いろいろなところでイコールメソッドを見かけます。これは実際にどのような働きをするのでしょうか?また、このメソッドはすべてのクラスで必要なのでしょうか?
public boolean equals(Object obj)
{
if (obj == this)
{
return true;
}
if (obj == null)
{
return false;
}
if (obj instanceof Contact)
{
Contact other = (Contact)obj;
return other.getFirstName().equals(getFirstName()) &&
other.getLastName().equals(getLastName()) &&
other.getHomePhone().equals(getHomePhone()) &&
other.getCellPhone().equals(getCellPhone());
}
else
{
return false;
}
}
解決方法は?
オブジェクトの等価性を再定義しています。
デフォルトでは(
java.lang.Object
) は、オブジェクトが他のオブジェクトと同じインスタンスである場合にのみ等しくなります。しかし、オーバーライドすると、カスタムの等式ロジックを提供することができます。
例えば
java.lang.String
は、内部の文字配列を比較することで等価性を定義しています。そのため
String a = new String("a"); //but don't use that in programs, use simply: = "a"
String b = new String("a");
System.out.println(a == b); // false
System.out.println(a.equals(b)); // true
このような等質性のテストは必要ないかもしれませんが、使用するクラスでは必要です。例えば
List.contains(..)
と
List.indexOf(..)
使用
.equals(..)
.
チェック
javadoc
が必要とする正確な契約については
equals(..)
メソッドを使用します。
をオーバーライドする場合、多くの場合
equals(..)
をオーバーライドする必要があります。
hashCode()
(同じフィールドを使用して)。これもjavadocに明記されています。
関連
-
[解決済み] Java enumのメンバーを比較する:==またはequals()?
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] serialVersionUIDとは何ですか、またなぜそれを使用する必要がありますか?
-
[解決済み] リフレクションとは何か、なぜ有用なのか?
-
[解決済み] JavaBeanとは何ですか?
-
[解決済み] Could not find or load main class "とはどういう意味ですか?
-
[解決済み] 整数の平方根が整数であるかどうかを判断する最速の方法
-
[解決済み] シンクロナイズド」とはどういう意味ですか?
-
[解決済み】Javaではfinallyブロックは必ず実行されるのですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] JavaでFileFilterを作るには?
-
[解決済み] Java の substring() の時間複雑性
-
[解決済み] Oracle DB : java.sql.SQLException: 閉じた接続
-
[解決済み] Eclipse- Dynamic Web Module 3.0 で新しいプロジェクトを作成するときに Java 1.6 以降が必要なエラーが発生する。
-
[解決済み] javaでAnnotation Inheritanceのようなものはあるのでしょうか?
-
[解決済み] 午前0時からの時間を秒単位で取得する方法
-
[解決済み] JDBC タイプの方言マッピングがありません。1111
-
[解決済み] アクティビティに割り当てられない
-
[解決済み] java.io.IOException。DER長の短い読み取り
-
[解決済み] javaのequals()メソッドをオーバーライドする - 動作しない?