[Java]compareToでの数値比較における罠

1 min 420 views
nao

nao

FOLLOW

今回は、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」よりも大きいと判断されます。

まとめ

文字列型の数値を比較したい場合は、一度数値型に変更してから不等号で比較しましょう。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です