JavaにはIntegerなどの変数の基本型を扱うためにラッパークラスがあります。
しかし、「ラッパークラスってそもそも何?」「どうやって使うの?」と疑問を持っている方もいるのではないでしょうか?
そこで、この記事では、
・ラッパークラスとは
・ラッパークラス(Integer型)の使い方
・Integer型の最大値と最小値
という基本的な内容から、
・Integer型で数値・文字列の変換
・Integer型のオブジェクトの比較
といった応用的な内容に関しても解説していきます。
今回は、ラッパークラスの様々な使い方をわかりやすく解説します!
なお、Javaの記事については、こちらにまとめています。
ラッパークラスとは
Javaの変数には、基本的なデータを格納するための値型(プリミティブ型)があります。
値型には次のデータ型があります。
・byte
・char
・short
・int
・long
・float
・double
・boolean
String型は値型ではなく、参照型(クラス型)です。
値型は何のメソッドも持たないため、「int.メソッド名()」のように、ドット演算子でメソッドを呼び出すことはできません。
この値型を、参照型のようにインスタンス化ができて、便利なメソッドを使えるようにしたクラスをラッパークラスといいます。
例えば、int型のラッパークラスはIntegerクラスになります。
ラッパークラス(Integer)の基本的な使い方
ここでは、ラッパークラスの使い方を解説します。
例として、値をIntegerクラスのtoStringメソッドで文字列に変換してから出力する方法を解説します。
int型とInteger型のそれぞれの使い方を次のプログラムで確認してみましょう。
public class IntegerBasic { public static void main(String args[]) { int i_primitive = 10; System.out.println("基本型:" + Integer.toString(i_primitive)); Integer i_wrapper = new Integer(10); System.out.println("Integerクラス:" + i_wrapper.toString()); } }
実行結果:
基本型:10 Integerクラス:10
Integer型の最大値と最小値
Integer型の最大値と最小値は簡単に取得することができます。
間違って最大値を超えた値を格納しようとしないように注意してください。
次のプログラムで確認してみましょう。
public class Main { public static void main(String[] args) throws Exception { System.out.println("最小値:" + Integer.MIN_VALUE); System.out.println("最大値:" + Integer.MAX_VALUE); } }
実行結果:
最小値:-2147483648 最大値:2147483647
このように「Integer.MIN_VALUE」と「 Integer.MAX_VALUE」を使って最大値と最小値を取得することができました。
Integer型で数値・文字列の変換
数値から文字列、または文字列から数値への変換方法を解説します。
valueOfで数値から文字列に変換
まずは数値から文字列への変換です。
public class IntegerToString { public static void main(String args[]) { Integer i10 = new Integer(10); // Integer型の数値を文字列に変換 String str = String.valueOf(i10); System.out.println(str); } }
実行結果:
10
StringクラスのvalueOfメソッドを使って変換しています。
ちなみにプリミティブ型の変数や値、つまりvalueOf(10)としても問題なく動作します。
parseIntで文字列から数値へ変換
次に、文字列から数値への変換をします。
IntegerクラスのparseIntメソッドを使います。
public class StringToInteger { public static void main(String args[]) { String s10 = "10"; // 文字列を数値に変換 int num = Integer.parseInt(s10); System.out.println(num); } }
実行結果:
10
問題なく変換できました。
nullのチェックをする方法
文字列を数値へ変換する際に、文字列がnullのままうっかり変換してしまう場合があるかもしれません。
そんな場合はNumberFormatExceptionの例外が発生しますので、注意しましょう!
サンプルコードで確認します。
public class StringToInteger { public static void main(String args[]) { String s10 = null; // 文字列を数値に変換 int num = Integer.parseInt(s10); System.out.println(num); } }
実行結果:
Exception in thread "main" java.lang.NumberFormatException: null at java.lang.Integer.parseInt(Integer.java:542) at java.lang.Integer.parseInt(Integer.java:615) at StringToInteger.main(StringToInteger.java:7)
このサンプルコードのように数値に変換する元の文字列がnullの場合、NumberFormatExceptionの例外が発生します。
parseIntメソッドの引数に指定する文字列がnullでないことを確認してからparseIntメソッドを実行させるように記述することをオススメします。
文字列がnullでないことを確認する方法は以下のとおりです。
文字列名 != null
String型がnullかどうかをチェックする方法については、次の記事に詳細な説明がありますのでぜひ参考にしてください!
Integer型のオブジェクトの比較
Integer型のオブジェクトを比較してみます。
方法はいくつかあるので、順に解説していきます。
比較演算子による比較
Ingeger型のオブジェクトを比較演算子==で比較するとどうなるか、次のプログラムで確認してみましょう。
public class IntegerCompareSample1 { public static void main(String args[]) { Integer i10_1 = new Integer(10); Integer i10_2 = new Integer(10); // 比較演算子による比較 System.out.println(i10_1 == i10_2); } }
実行結果:
false
このサンプルコードでは、10という同じ値を入れた2つの変数を、比較演算子 == で比較しました。
お互い10を入れたのだからtrueと表示されるはずですが、結果はfalseとなります。
falseなので、Javaは異なっていると認識したようです。
実は、i10_1 と i10_2はオブジェクトなので、比較演算子による値の比較ができなくなっています。
厳密にいうと比較演算子は使えるのですが、返ってくるのはメモリ上のアドレスが同じかどうか、つまり同じオブジェクトかどうか、という比較になります。
先の例では、参照先の値は同じでも、オブジェクトとしては別物なので false が返ってきたということになります。
よって、参照先の値が同じかどうかを比較する場合は比較演算子ではなく、次で解説するequalsメソッドを使ってください。
equalsによる比較
文字列の比較でもよく使われる、equalsメソッドによる比較です。
public class IntegerCompareSample2 { public static void main(String args[]) { Integer i10_1 = new Integer(10); Integer i10_2 = new Integer(10) ; // equalsで比較 System.out.println(i10_1.equals(i10_2)); } }
実行結果:
true
equalsメソッドで、オブジェクトの参照先の値を比較しているため、正しい結果が得られました。
equalsによる比較についての詳しい使い方はこちらの記事で解説しているので、ぜひ確認してください。
compareToによる比較
先のequalsメソッドでは、等しいかどうかは確認できますが、どちらが大きいかまでは確認できません。
よって、大小関係まで比較したい場合は、compareToを使います。
public class IntegerCompareSample3 { public static void main(String args[]) { Integer i10_1 = new Integer(12); Integer i10_2 = new Integer(10) ; // compareToで比較 System.out.println(i10_1.compareTo(i10_2)); } }
実行結果:
1
compareToメソッドの戻り値は、以下の通りです。
i10_1 < i10_2 ならば、-1
i10_1 = i10_2 ならば、0
i10_1 > i10_2 ならば、1
compareToメソッドの詳しい使い方はこちらの記事で解説しているのでぜひ確認してください。
クラスの使い方総まとめ
クラスのさまざまな使い方については、以下の記事にまとめていますので、ぜひ参考にしてくださいね!
まとめ
この記事では、ラッパークラス(特にIntegerクラス)と数値や文字列への変換を解説しました。
比較的よく見る実装ですので、確実に理解しておくことをおススメします。
もし忘れたら、本記事を参照してくださいね!