Javaのラッパークラス
1. 概要
名前が示すように、wrapper classes are objects encapsulating primitive Java types.
各Javaプリミティブには、対応するラッパーがあります。
-
boolean、byte、short、char、int、long、float、double
-
ブール値、バイト、ショート、文字、整数、ロング、フロート、 ダブル
これらはすべてjava.langパッケージで定義されているため、手動でインポートする必要はありません。
2. ラッパークラス
「ラッパークラスの目的は何ですか?」 これは、最も多いcommon Java interview questionsの1つです。
基本的に、generic classes only work with objects and don’t support primitivesです。 その結果、それらを使用する場合は、プリミティブ値をラッパーオブジェクトに変換する必要があります。
たとえば、Java Collection Frameworkはオブジェクトのみを処理します。 ずっと昔(Java 5より前のほぼ15年前)には自動ボクシングがなく、たとえば、Integers.のコレクションに対してadd(5)を単純に呼び出すことはできませんでした。
その時、それらのprimitive values needed to be manually converted to corresponding wrapper classesはコレクションに保存されていました。
現在、オートボクシングを使用すると、ArrayList.add(101)を簡単に実行できますが、内部では、Javaがプリミティブ値をIntegerに変換してから、valueOf()メソッド.を使用してArrayListに格納します。 s
3. プリミティブからラッパークラスへの変換
ここで大きな問題は、プリミティブ値を対応するラッパークラスにどのように変換するかです。 intからIntegerまたはcharからCharacter?
さて、ラッパークラスのwe can either use constructor or static factory methods to convert a primitive value to an object。
Javaでint値をIntegerオブジェクトに変換する例を見てみましょう。
Integer object = new Integer(1);
Integer anotherObject = Integer.valueOf(1);
valueOf()メソッドは、指定されたint値を表すインスタンスを返します。
キャッシュされた値を返すため、効率的です。 常に-128〜127の値をキャッシュしますが、この範囲外の他の値もキャッシュできます。
同様に、booleanからBoolean, byte、Byte, char、Character, long、Long, float、Float,、doubleからDouble.ただし、convert String to Integerが必要な場合は、Stringはラッパークラスではないため、parseInt()メソッドを使用する必要があります。
一方、to convert from a wrapper object to a primitive value, we can use the corresponding method such as intValue(), doubleValue()など:
int val = object.intValue();
包括的なリファレンスはhereにあります。
4. 自動ボックス化とボックス化解除
前のセクションでは、プリミティブ値をオブジェクトに手動で変換する方法を示しました。
Java 5の後、this conversion can be done automatically by using features called autoboxing and unboxing.
“Boxing” refers to converting a primitive value into a corresponding wrapper object.これは自動的に発生する可能性があるため、オートボクシングと呼ばれます。
同様に、when a wrapper object is unwrapped into a primitive value then this is known as unboxing.
これが実際に意味することは、ラッパーオブジェクト を期待するメソッドにプリミティブ値を渡すか、オブジェクトを期待する変数にプリミティブを割り当てることができるということです。
List list = new ArrayList<>();
list.add(1); // autoboxing
Integer val = 2; // autoboxing
この例では、Javaはプリミティブint値をラッパーに自動的に変換します。
内部的には、valueOf()メソッドを使用して変換を容易にします。 たとえば、次の行は同等です。
Integer value = 3;
Integer value = Integer.valueOf(3);
これにより変換が簡単になり、コードが読みやすくなりますが、we shouldn’t use autoboxing e.g. inside a loopが使用される場合があります。
オートボクシングと同様に、プリミティブを期待するメソッドにオブジェクトを渡すとき、またはプリミティブ変数にオブジェクトを割り当てるときに、アンボクシングが自動的に行われます。
Integer object = new Integer(1);
int val1 = getSquareValue(object); //unboxing
int val2 = object; //unboxing
public static int getSquareValue(int i) {
return i*i;
}
基本的に、if we write a method that accepts a primitive value or wrapper object, we can still pass both values to them. Javaは、適切なタイプの受け渡しを処理します。 コンテキストに応じて、プリミティブまたはラッパー。
5. 結論
このクイックチュートリアルでは、Javaのラッパークラス、およびオートボックス化とボックス化解除のメカニズムについて説明しました。