Wrapperクラス


Rapperクラス(Wrapperクラス)


プログラムによっては、基本タイプのデータをオブジェクトとして扱う必要がある場合があります.
たとえば、メソッドの引数がオブジェクトタイプのみを必要とする場合、デフォルトのタイプのデータは受け入れられません.
操作は、基本タイプのデータをオブジェクトに変換してから実行する必要があります.
8つの基本タイプのデータをオブジェクトとしてパッケージするクラスを「Rapperクラス」(Wrapper class)と呼びます.
RAPPERクラスは,各タイプに対応するデータを引数として受信し,対応する値を持つオブジェクトとする.
これらのRapperクラスはすべてjavaです.langパッケージに含まれます.
Javaのデフォルトタイプに対応するRapperクラスは次のとおりです.
基本タイプRAPPERクラスb y t e B y t e s h o r t i n I n t e g e r l o ngfloatFlatorDoubleCharacterBoolean Boolean
ただし、すべてのRapperクラスでは、IntegerクラスとCharacterクラスだけが異なるデフォルトタイプと名前を持っています.

箱詰めと解体


RAPPERクラスは算術演算に定義されたクラスではないため、インスタンスに格納されている値は変更できません.
新しいインスタンスを作成して値を参照するだけで、作成したインスタンスの値のみを参照できます.

上図に示すように、基本タイプのデータをRapperクラスインスタンスに変換するプロセスを「カプセル化」(Boxing)と呼ぶ.
逆に、Rapperクラスインスタンスに格納された値をデフォルトタイプのデータとして取り出すプロセスをUnBoxingと呼ぶ.

自動梱包と自動開梱


JDK 1.5から、モザイクやアンロードが必要な場合は、Javaコンパイラが自動的に処理します.
この自動化されたモザイクおよび取り外しは、「自動アセンブリ」および「自動取り外し」と呼ばれます.
次の例では、テッセレーションとアンインストール、自動アンインストールと自動アンインストールの違いを説明します.
Integer num = new Integer(17); // 박싱

int n = num.intValue();        // 언박싱

System.out.println(n);

 

Character ch = 'X'; // Character ch = new Character('X'); : 오토박싱

char c = ch;        // char c = ch.charValue();           : 오토언박싱

System.out.println(c);
実行結果
17
X
上記の例に示すように、パッケージングクラスであるIntergerクラスおよびCharacterクラスは、それぞれ、着脱のためのintValue()メソッドおよびcharValue()メソッドを含む.
自動アセンブリでは、newキーを使用せずにCharacterインスタンスを自動的に作成できます.
代わりに、charValue()メソッドを使用する必要がなく、直接参照インスタンスに格納されている値を自動的にアンインストールすることができます.
したがって、自動追跡および自動開梱により、次の例に示すように、基本タイプとRapperクラスの間で様々な演算が可能になります.
public class Wrapper02 {

    public static void main(String[] args) {

        Integer num1 = new Integer(7); // 박싱

        Integer num2 = new Integer(3); // 박싱

 

        int int1 = num1.intValue();    // 언박싱

        int int2 = num2.intValue();    // 언박싱

 

①      Integer result1 = num1 + num2; // 10 

②      Integer result2 = int1 - int2; // 4

③      int result3 = num1 * int2;     // 21

    }

}
実行結果
10
4
21
public class Wrapper03 {

    public static void main(String[] args) {

        Integer num1 = new Integer(10);

        Integer num2 = new Integer(20);

        Integer num3 = new Integer(10);

 

        System.out.println(num1 < num2);       // true

①      System.out.println(num1 == num3);      // false

②      System.out.println(num1.equals(num3)); // true

    }

}
実行結果
true
false
true
RAPPERクラスの比較演算は注釈でも可能であるが,インスタンスに格納されている値が等しいかどうかは,比較演算子としての対等演算子(=)を①番線のように使用することはできず,②番線のようにequals()メソッドを使用する必要がある.
RAPPERクラスもオブジェクトであるため、ピア演算子(==)を使用すると、2つのインスタンスの値ではなく、2つのインスタンスのアドレス値が比較されます.
したがって、2つの異なるインスタンスを等しい演算子(==)で比較すると、false値は常に返されます.
したがって、equals()メソッドを使用して、インスタンスに格納されている値が等しいかどうかを決定する必要があります.