はじめに
JavaのcompareTo
に関する初歩的な小ネタです。
「compareTo
の結果って、どっちがどっちかすぐわかんなくなっちゃう」という方に読んで欲しいです。
compareTo
は常に0
と比較する
Comparable#compareTo
の結果は、常に0
と比較する必要があります。
-1
や1
と比較しているコードを見かけることがありますが、これは正しくありません。
以下、標準APIのJavaDocから引用(強調は私がしました)
戻り値:
このオブジェクトが指定されたオブジェクトより小さい場合は負の整数、等しい場合はゼロ、大きい場合は正の整数
上記のとおり、必ずしも-1
や1
といった固定値が返ってくる保証はありません。
(-1
や1
を返す実装になっていることが多いですが)
サンプルコード
比較演算子1の左辺にcompareTo
呼び出し、右辺に0
を記述するようにすれば、素直に読み書きできます。
compareTo
if (obj1.compareTo(obj2) == 0) {
System.out.println("obj1 = obj2");
}
if (obj1.compareTo(obj2) != 0) {
System.out.println("obj1 ≠ obj2");
}
if (obj1.compareTo(obj2) < 0) {
System.out.println("obj1 < obj2");
}
if (obj1.compareTo(obj2) <= 0) {
System.out.println("obj1 ≦ obj2");
}
if (obj1.compareTo(obj2) > 0) {
System.out.println("obj1 > obj2");
}
if (obj1.compareTo(obj2) >= 0) {
System.out.println("obj1 ≧ obj2");
}
さいごに
0
と比較することを徹底すれば、compareTo
の結果で迷うことはありません。
-
==
や<
など ↩