基本(プリミティブ)型である int や double の値をオブジェクトとして扱えるように用意されているのがラッパークラス。ラッパーとはwrapper(覆うもの)を意味。 データは大きくプリミティブと参照型に分類されます。 最小単位となるデータの記述方法を元から定めてしまっているものを,プリミティブ型と呼びます プリミティブ型とは、プログラミング言語などが仕様として提供する基本的なデータ型。または、定義に他のデータ型を用いない独立したデータ型。 参照型というのは,実際にデータを格納しているポインタ(メモリ上のアドレス:住所みたいなもの)を保持するようなデータ型のことです。後述します。 プリミティブ型(組み込みデータ型 / 基本データ型)とは - 意味をわかりやすく - IT用語辞典 e-Words プリミティブは全部小文字 ラッパークラスは頭文字が大文字 インスタンス宣言によりインスタンス化することでメソッドを呼び出してデータを処理することができるようになります。 例えばIntegerなら、 上記のメソッドは、int型の変数では使えませんがInteger型では使用することができます。 本来、以下のようにラッパークラスのインスタンス生成した後にその値をプリミティブなint
に代入しようとすれば以下の手順が必要です。 ところがアンボクシング機能によって以下の書き方で変換が自動で行われます。 オートボクシングも同じですね。 オートボクシングを使用することでラッパークラスのオブジェクトをあたかも基本データ型のように扱うことができます。 余談ですが、学習し初めの頃この機能のせいで int と integer の何が違うの??と、混乱したことがあります。笑 まあ色々と違うところ沢山あるんで、冷静に考えればわかったんですけどね。。。 ラッパークラスは参照型のため、nullが入る可能性があります。
nullが入ったラッパークラスのインスタンスをアンボクシング機能を使ってプリミティブ型へ変換するとNullPointerExceptionが発生します。 参照型変数は参照を持つことで「インスタンスを指す」状態になります。
これを、参照の代わりに「null」という値を入れることで、「どのインスタンスも指していない」状態になってしまいます プリミティブ型はメモリに直接書き込まれる具体的なデータ値(数値や文字)を代入することができます。 それに対して参照型は、メモリに格納された値でなく値が格納されたメモリのポインタ(メモリ上のアドレス:住所みたいなもの)を参照値として代入しています。 値そのものを保持するのではなく、値が置いてある場所を保持するのが参照型のようですね。 参照しているところのポインタに実際に格納されている値が変わってしまえば参照型の値も変わってしまう問題は容易に想像できますよね。 あるメソッドには決められた引数しか渡してはいけない場合、その引数が参照型の変数であった場合、具合悪い事が発生しそうな場合がありそうですね。
この辺りは既に多くの方が記事にしているので、こちらでは書きません。 参照型の参考記事を以下に貼ります。
続きはここを読んでくださればわかると思います。非常に解りやすい良記事でした。ラッパークラスとは?
各プリミティブに対応したラッパークラス
プリミティブ ラッパークラス boolean Boolean byte Byte char Character int Integer long Long short Short double Double float Float オブジェクトとして扱えると何がいいの?
オートボクシング(Autoboxing)・アンボクシング(Unboxing)
Integer integerNum = new Integer(16);
int intNum = integerNum.intValue();
Integer integerNum = new Integer(16);
int intNum = integerNum;
注意点
Integer integerNum = null;
int intNum = integerNum; //実行時NullPointerException発生
参照型について
めんどくさいし、完全に理解してるわけじゃないし