Java

JavaのcompareToの結果は、必ず0と比較しよう

はじめに

JavaのcompareToに関する初歩的な小ネタです。
compareToの結果って、どっちがどっちかすぐわかんなくなっちゃう」という方に読んで欲しいです。

compareToは常に0と比較する

Comparable#compareToの結果は、常に0と比較する必要があります。
-11と比較しているコードを見かけることがありますが、これは正しくありません。

以下、標準APIのJavaDocから引用(強調は私がしました)

戻り値:
このオブジェクトが指定されたオブジェクトより小さい場合は負の整数、等しい場合はゼロ、大きい場合は正の整数

上記のとおり、必ずしも-11といった固定値が返ってくる保証はありません。
(-11を返す実装になっていることが多いですが)

サンプルコード

比較演算子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の結果で迷うことはありません。


  1. ==<など