Javaのラッパークラス

1概要

その名前が示すように、** ラッパークラスはプリミティブなJava型をカプセル化したオブジェクトです。

各Javaプリミティブには対応するラッパーがあります。

  • boolean、byte、short、char、int、long、float、double

  • Boolean、Byte、Short、Character、Integer、Long、Float、 Double

これらはすべて java.lang パッケージで定義されているため、手動でインポートする必要はありません。

2ラッパークラス

「ラッパークラスの目的は何ですか?」それは最もhttp://javarevisited.blogspot.com/2015/10/133-java-interview-questions-answers- from-last-5 -years.html[一般的なJavaインタビューの質問]の一つです。

基本的に、 ジェネリッククラスはオブジェクトでのみ動作し、プリミティブをサポートしません 。その結果、それらを使用したい場合は、プリミティブ値をラッパーオブジェクトに変換する必要があります。

たとえば、Java Collection Frameworkはオブジェクトと排他的に連携します。 15年近く前のJava 5より前の昔のことです。たとえば、 Integers. のコレクションに対して add(5) を呼び出すことはできません

当時は、これらのプリミティブ値は手動で対応するラッパークラスに変換され、コレクションに格納される必要がありました。

今日、オートボクシングを使用すると、 ArrayList.add(101) を簡単に実行できますが、内部的にJavaは valueOf() メソッドを使用して ArrayList に格納する前に、 Integer にプリミティブ値を変換します

** 3ラッパークラス変換へのプリミティブ

今の大きな問題は、どうやってプリミティブ値を対応するラッパークラスに変換するのですか。 int から Integer へ、または char から Characterへ

さて、 プリミティブ値をラッパークラスのオブジェクトに変換するために コンストラクタか静的ファクトリメソッドを使うことができます。

Javaで int 値を Integer オブジェクトに変換する例を見てみましょう。

Integer object = new Integer(1);

Integer anotherObject = Integer.valueOf(1);

valueOf() メソッドは、指定された int 値を表すインスタンスを返します。

キャッシュされた値を返すので効率的です。常に-128から127までの値をキャッシュしますが、この範囲外の他の値もキャッシュできます。

同様に、 boolean Booleanに、byte Byteに、char Chracterに、long Floatに、 および double Doubleに、それぞれ変換することもできます。http://javarevisited.blogspot.com/2011/08/string-to-integer-to-string.html[文字列を整数値に変換する]そして String はラッパークラスではないので parseInt()__メソッドを使う必要があります。

一方、ラッパーオブジェクトからプリミティブ値に変換するには、 intValue()、doubleValue() ** などの対応するメソッドを使用できます。

int val = object.intValue();

包括的な参照は ここ にあります。

4オートボクシングとボクシング解除

前のセクションでは、プリミティブ値をオブジェクトに手動で変換する方法を示しました。

Java 5以降、この変換は、オートボクシングおよびボックス解除と呼ばれる機能を使用して自動的に実行できます。

  • 「ボクシング」とは、プリミティブ値を対応するラッパーオブジェクトに変換することを指します。** これは自動的に行われる可能性があるため、オートボクシングと呼ばれています。

同様に、** ラッパーオブジェクトがプリミティブ値に展開されると、これはアンボックス化と呼ばれます。

これが実際に意味することは、ラッパーオブジェクトを期待するメソッドにプリミティブ値を渡すことができること、またはオブジェクトを期待する変数にプリミティブを割り当てることです。

List<Integer> list = new ArrayList<>();
list.add(1);//autoboxing

Integer val = 2;//autoboxing

この例では、Javaは自動的にプリミティブの int 値をラッパーに変換します。

内部的には、変換を容易にするために valueOf() メソッドを使用しています。

たとえば、次の行は同等です。

Integer value = 3;

Integer value = Integer.valueOf(3);

これにより変換が簡単になりコードが読みやすくなりますが、 自動ボクシングを使用しない方がよい場合があります。ループ内

オートボクシングと同様に、オブジェクトをプリミティブを必要とするメソッドに渡すとき、またはそれをプリミティブ変数に割り当てるときに、ボックス化解除は自動的に行われます。

Integer object = new Integer(1);
int val1 = getSquareValue(object);//unboxing
int val2 = object;//unboxing

public static int getSquareValue(int i) {
    return i** i;
}

基本的に、** もし私たちがプリミティブな値あるいはラッパーオブジェクトを受け付けるメソッドを書いたとしても、両方の値をそれらに渡すことができる。コンテキストに応じてプリミティブまたはラッパー。

5結論

このクイックチュートリアルでは、Javaのラッパークラス、および自動ボクシングとボックス解除のメカニズムについて説明しました。