Java:compareToとequalsの違い
※自分用学習メモです
compareTo と equals の違いは、目的や使われ方に関係しています。両方ともオブジェクト同士の比較を行いますが、どのように比較するかが異なります。
1. equals
目的: equals メソッドは、2つのオブジェクトが同じかどうかを判定するために使われます。
返り値: boolean 型(true または false)。
使い方: equals は、オブジェクトが等価であるかを確認するために使います。equals メソッドは通常、Object クラスに定義されていて、必要に応じてオーバーライドされます。
例:
String str1 = "Hello";
String str2 = "Hello";
if (str1.equals(str2)) {
System.out.println("str1とstr2は等しいです");
} else {
System.out.println("str1とstr2は等しくありません");
}
この例では、equals メソッドを使って str1 と str2 の文字列が等しいかどうかを判定しています。equals メソッドは 2つのオブジェクトの内容が同じかどうか を確認します。
2. compareTo
目的: compareTo メソッドは、2つのオブジェクトを順序付けして比較するために使います。通常、ソートや並べ替えの際に使われます。
返り値: int 型(0、負の数、正の数のいずれか)。
0: 両者が等しい場合。
負の数: 比較対象が小さい場合。
正の数: 比較対象が大きい場合。
使い方: compareTo メソッドは、オブジェクトが持つ値や順序を比較します。このメソッドは Comparable インターフェースを実装したクラスで使われます。
例:
String str1 = "Apple";
String str2 = "Banana";
int result = str1.compareTo(str2);
if (result == 0) {
System.out.println("str1とstr2は等しいです");
} else if (result < 0) {
System.out.println("str1はstr2より小さいです");
} else {
System.out.println("str1はstr2より大きいです");
}
この例では、compareTo メソッドを使って str1 と str2 の文字列順序を比較しています。compareTo は str1 が str2 より小さい場合、負の値を返します(辞書順で比較される)。
違いのまとめ:
具体的な使用例:
equals の例:
2つのオブジェクトが等しいかどうかを確認する場合に使います。
例えば、2つの String オブジェクトの内容が等しいか、または2つのカスタムクラスオブジェクトの特定のフィールドが等しいかどうかを確認する際に使います。
compareTo の例:
オブジェクト同士を比較して順序付けする場合に使います。Comparable インターフェースを実装することで、カスタムオブジェクトでもこのメソッドを実装できます。たとえば、ソートアルゴリズムで2つのオブジェクトを比較する際に使用します。
compareTo と equals の併用例:
String str1 = "Hello";
String str2 = "World";
if (str1.equals(str2)) {
System.out.println("等しい");
} else {
int result = str1.compareTo(str2);
if (result < 0) {
System.out.println("str1はstr2より小さい");
} else if (result > 0) {
System.out.println("str1はstr2より大きい");
}
}
このように、equals と compareTo を組み合わせて使用することで、まずは等しいかどうかを確認し、等しくなければ順序付けの比較を行うことができます。