Java で 数字の文字列を int
型に変換する際には、Integer.valueOf
を利用するのが一般的です。
例えば以下のような感じ。
public class ToInteger {
public static void main(String[] args) {
System.out.println(Integer.valueOf("1"));
System.out.println(Integer.valueOf("2"));
System.out.println(Integer.valueOf("3"));
System.out.println(Integer.valueOf("4"));
System.out.println(Integer.valueOf("5"));
}
}
出力結果
1
2
3
4
5
なんの変哲もない結果です。
では、これをString
型ではなくchar
型でやってみましょう。
public class ToInteger {
public static void main(String[] args) {
System.out.println(Integer.valueOf('1'));
System.out.println(Integer.valueOf('2'));
System.out.println(Integer.valueOf('3'));
System.out.println(Integer.valueOf('4'));
System.out.println(Integer.valueOf('5'));
}
}
出力結果
49
50
51
52
53
ほとんどの人が望んでいない結果が出力されています。
最初のString
型でのInteger.valueOf
は Integer.valueOf(String s)
が呼び出されていますが、
後者のchar
型の場合は、Integer.valueOf(int i)
が呼び出されています。
というわけでchar
型の場合 int
型にキャストされて Integer.valueOf
が呼び出されているのと同様です。
各 char
型の値を int
型 にキャストした値を出力してみると
public class ToInteger {
public static void main(String[] args) {
System.out.println((int) '1');
System.out.println((int) '2');
System.out.println((int) '3');
System.out.println((int) '4');
System.out.println((int) '5');
}
}
出力結果
49
50
51
52
53
さきほどと同様の結果が出力されます。これはASCIIコードになっている状態です。
では、数字を意味するchar
型をそのままの見た目の数値に変換したい場合、どうすればいいかというと
Character.getNumericValue
というメソッドが用意されているので、これを使いましょう。
public class ToInteger {
public static void main(String[] args) {
System.out.println(Character.getNumericValue('1'));
System.out.println(Character.getNumericValue('2'));
System.out.println(Character.getNumericValue('3'));
System.out.println(Character.getNumericValue('4'));
System.out.println(Character.getNumericValue('5'));
}
}
出力結果
1
2
3
4
5
望んだ結果となりました。
まとめ
Java で char
型を利用するケースが必ずしも多くないため、こんな挙動について知らなくてもいいかもしれないですが、
はまると一瞬混乱を招くので、一応Character.getNumericValue
などの存在も知っておいても損は無いかもしれません。