ラッパークラスとは
int型やdouble型といった基本データ型は、その値そのものを表現しているだけで、動作を定義するメソッドを持っていません。
文字列で表現されている数値をint型に変換したり、その逆だったりと、基本データ型に対しても処理を行いたい場合があります。
例えば、コマンドライン引数でユーザーから値を取得したとしましょう。
コマンドライン引数はmain()メソッドの引数として定義されたString型の配列変数argsに格納されます。
受け取った値はString型とみなされるので、この値を使って演算等を行いたい場合には、数値型に変換する必要があります。
またラッパークラスは基本データ型の値を操作するメソッドを提供して、オブジェクトとして扱えるようにします。
例えばインターネットのお買いのサイトを考えてみましょう。
自分が購入した商品名や個数をプログラムで保有して、購入したデータを計算しなければなりません。
こういったときに、Javaでは値を格納するコレクションという機能が用意されています。
コレクションには、基本データ型は格納できず、オブジェクト型だけが格納できます。
コレクションに値を格納したい場合にもラッパークラスを使って、基本データ型をオブジェクト型に変換します。
基本データ型の値をオブジェクトに変換するには、ラッパークラスのコンストラクタを使用する方法とメソッドを使用する方法があります。
基本データ型とラッパークラス
基本データ型にはそれぞれ対応したラッパークラスが用意されています。下の表はその対応表です。
boolean型、byte型、short型、long型、float型、double型は先頭の文字を大文字にしたものがラッパークラスになります。
int型はInteger型、char型はCharacter型と特殊なので、注意が必要です。
ポイント!ラッパークラス
食材を包む透明のビニール状のものをサランラップと呼ぶことがありますね。
ラップ(wrap)とは包む、包装するという意味があります。
あるクラスやメソッド、データ型などが提供する機能やデータを含み、別の形で提供するもののことをラッパーといいます。
元の機能を包み、覆い隠す役割を果たします。
ラッパークラスのコンストラクタ
ラッパークラスのコンストラクタを使うと、基本データ型をオブジェクト型に変換することができます。
それぞれのラッパークラスには、引数の型の違いにより、複数のコンストラクタが用意されています。
例えばInteger型には引数にint型をとるものと、String型をとるものがあります。
int型を引数にとる場合は、
Integer i1 = Integer(100);
と記述することで、int型の100という値をオブジェクトに変換して、変数i1に格納します。
これにより、変数i1はオブジェクト型として、100という性質を持つデータを扱えるようになります。
String型を引数にとる場合は、
Integer i2 = Integer("100");
と記述することで、String型の文字列100という値をオブジェクトに変換することができます。
String型を引数にとるコンストラクタの引数に、数字でない文字を指定すると、NumberFormatExceptionという例外(エラー)が発生します。
【Integerクラスのコンストラクタ】
public class WrapperSample1 { public static void main(String[] args) { Integer i1 = new Integer(100); Integer i2 = new Integer("200"); Integer i3 = new Integer(args[0]); System.out.println((i1 + i2 + i3)); Integer i4 = new Integer("ABC"); } }
コマンドライン引数に「500」を設定して実行します。
実行結果
800 Exception in thread "main" java.lang.NumberFormatException: For input string: "ABC" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) at java.lang.Integer.parseInt(Integer.java:580) at java.lang.Integer.<init>(Integer.java:867) at WrapperSample1.main(WrapperSample1.java:9)
Integerクラスのコンストラクタを使って、4つのIntegerオブジェクトを作ろうとしています。
3行目は引数にint型をとり、4行目はString型を取っています。
5行目はコマンドライン引数で指定され、main()メソッドの引数String型の配列変数args[0]に格納されたString型のデータをIntegerクラスのコンストラクタの引数に指定しています。
これにより4行目と5行目のString型の値が、Integer型というint型の性質を持つオブジェクトに変換されたため、6行目で足し算ができていることがわかります。
8行目ではコンストラクタの引数に数値に変換できない「ABC」が指定されているため、NumberFormatExceptionという例外(エラー)が発生していることがわかります。
【その他のラッパークラスのコンストラクタ】
public class WrapperSample2 { public static void main(String[] args) { Boolean b1 = new Boolean("true"); Boolean b2 = new Boolean("TRUE"); Boolean b3 = new Boolean("false"); Boolean b4 = new Boolean("abc"); System.out.println("b1:"+ b1); System.out.println("b2:"+ b2); System.out.println("b3:"+ b3); System.out.println("b4:"+ b4); System.out.println(); Float f1 = new Float(300.5f); Float f2 = new Float(400.5f); Float f3 = new Float("500.5"); System.out.println((f1 + f2 + f3)); } }
実行結果
b1:true b2:true b3:false b4:false 1201.5
Booleanクラスのコンストラクタは引数にboolean型もしくはString型を取ります。
3行目や4行目のように大文字でも小文字でも、Boolean型のオブジェクトとして、小文字のtrueが返されます。
5行目のようにString型でfalseを指定するとfalseのBoolean型のオブジェクトが生成されます。
6行目ではtrueでもfalseでもない文字列をして指定します。
このようにboolean型に関係のない文字列はすべてfalseとみなされます。
Float型のコンストラクタは、float型、double型、String型を引数にとります。
16行目ではString型をFloat型オブジェクトに変換しているため、18行目での演算はエラーになっていないことがわかります。
「ラッパークラス Part2」へ続きます
phoeducation.work
独学で挫折しそうになったら、オンラインプログラミングスクール