Javeのautbox ingとautunbox ing
3154 ワード
Java自動箱詰めと抜箱
一:自動箱とは何ですか?
基本データタイプの自動箱詰め(atobox ing)、箱出し(unbox ing)はJ 2 SE 5.0から提供される機能です。
一般的に私たちがクラスのオブジェクトを作成する時、私たちはこうなります。
基本データタイプは対象ではなく、int、double、bollanなどで定義される変数、定数を使用します。
基本データタイプには呼び出し可能な方法がありません。
自動取外し(unboxing)とは、対象の基本データを対象から自動的に取り出すことです。次のように自動的に箱を開けることができます。
また、自動箱詰め機能を使用しない場合は、通常の対象と同じです。次の例を見てください。
まず例を見ます
同じ理屈から分かるように、第一例のstr 3とstr 4はそれぞれnewの対象であり、str 1とstr 2は同じ対象を引用している。
回転:
http://www.cnblogs.com/danne823/archive/2011/04/22/2025332.html
一:自動箱とは何ですか?
基本データタイプの自動箱詰め(atobox ing)、箱出し(unbox ing)はJ 2 SE 5.0から提供される機能です。
一般的に私たちがクラスのオブジェクトを作成する時、私たちはこうなります。
Class a = new Class(parameter);
Integer , :
Integer i = 100; ( : int i = 100; )
, , :
Integer i = new Integer(100);
。
基本データタイプとオブジェクトの違い基本データタイプは対象ではなく、int、double、bollanなどで定義される変数、定数を使用します。
基本データタイプには呼び出し可能な方法がありません。
eg: int t = 1; t. 。
Integer t =1; t. 。
いつ自動で箱に入れますか? :Integer i = 100;
:Integer i = new Integer(100);
四:いつ自動的に箱を開けますか?自動取外し(unboxing)とは、対象の基本データを対象から自動的に取り出すことです。次のように自動的に箱を開けることができます。
Integer i = 10; //
int t = i; //
, 。
Integer i = 10;
System.out.println(i++);
Integer
// -128~127
Integer i1 = 200;
Integer i2 = 200;
System.out.println("i1==i2: "+(i1==i2));
// -128~127
Integer i3 = 100;
Integer i4 = 100;
System.out.println("i3==i4: "+(i3==i4));
:
i1==i2: false i3==i4: true
説明:equals()は2つのオブジェクトの値(内容)が同じかどうかを比較します。「=」は、2つのオブジェクトの参照(メモリアドレス)が同じかどうかを比較し、2つの基本データタイプの変数値が等しいかを比較するためにも使用されます。自動箱詰め時には、–128から127までの間のBytteに対して、Integer、Long値をBytte、Integer、Longオブジェクトとして箱詰めした後、メモリにキャッシュされ、再利用されます。–128から127までの値を超えたら、箱詰めされたByte、IntegerはオブジェクトLongに再使用されません。つまり、1回に1つのByteを新たに(new)することに相当します。IntegerまたはLongオブジェクト(だから、例ではi 1とi 2は異なる対象です。)Charcterはタイプの特殊性のために、キャッシュされているのは0-127間のオブジェクトです。Booleanタイプでは、2つのBooleanオブジェクトを直接キャッシュし、TRUEとFALSEを使用すると、valueOf()方法を使用する場合は、この2つのオブジェクトのうちの1つに直接戻すだけで、呼び出しごとにnewを使用するのではなく、ドキュメントでいうキャッシュによって常に要求される値の2つは、空間と時間性能を著しく向上させる。また、自動箱詰め機能を使用しない場合は、通常の対象と同じです。次の例を見てください。
Integer i3 = new Integer(100);
Integer i4 = new Integer(100);
System.out.println("i3==i4: "+(i3==i4));// false
Steringの箱詰めまず例を見ます
String str1 = "abc";
String str2 = "abc";
System.out.println(str2==str1); // true
System.out.println(str2.equals(str1)); // true
String str3 = new String("abc");
String str4 = new String("abc");
System.out.println(str3==str4); // false
System.out.println(str3.equals(str4)); // true
これはどう説明しますか?何も見えないようです。例を見てください。
String d ="2";
String e = "23";
e = e.substring(0, 1);
System.out.println(e.equals(d)); // true
System.out.println(e==d); // false
の第二の例では、eの初期値はdとは異なるので、eとdはそれぞれオブジェクトを作成し、e=dはfalseとなる。同じ理屈から分かるように、第一例のstr 3とstr 4はそれぞれnewの対象であり、str 1とstr 2は同じ対象を引用している。
回転:
http://www.cnblogs.com/danne823/archive/2011/04/22/2025332.html