今回は、compare Toで数値を比較する際に引っかかった罠について紹介します。
目次
compareToメソッドとは?
compare Toとは数値や文字列の比較のために使われます。基本的な構文は以下のように使用します。
変数1.compareTo.(変数2) // 変数1 < 変数2 マイナスの値を返す // 変数1 = 変数2 0を返す // 変数1 > 変数2 プラスの値を返す
文字列を比較する
文字列を比較する場合、文字コードを用いて値の比較をします。
String str1 = "a"; String str2 = "c"; System.out.println(str1.compareTo(str2));
これを実行すると以下のように出力されます。
-2
これは「a」の文字コードは「0x41」、「c」は「0x43」なので二つの差は「-2」となります。
数値を比較する
数値を比較する場合は注意することがあります。それは、comparaToは辞書的に比較している点です。以下の例を見てみます。
String num1 = "2"; String num2 = "10"; System.out.println(num1.compareTo(num2));
これを実行した場合「2」は「10」より小さいので「-8」が表示されそうですが、実際には以下のように表示されます。
1
この原因はcomparaToは辞書的に比較しているため、数値は「1,2,3,・・・」ではなく「1,10,100,1000,・・・2,20・・・」のような順番で並んでいます。したがって「2」は「10」よりも大きいと判断されます。
まとめ
文字列型の数値を比較したい場合は、一度数値型に変更してから不等号で比較しましょう。