Javaの基本(a)のオブジェクトラッパー

オブジェクトラッパー

各タイプと呼ばれる対応する基底クラス有するwarpperラッパー

/* extends Number */
// Interger         <-> int
// Long         <-> long
// Float        <-> float
// double       <-> double
// Short        <-> short
// Byte         <-> byte

/* not extends Number */
// Character        <-> character
// Void         <-> void
// Boolean      <-> boolean

物体を包装することである不変:ラッパーの構成後、パッケージングは、その中に値を変更することが許可されていません。

オブジェクトのラッパーがあるfinal:オブジェクトの定義は、ラッパーのサブクラスにすることはできません。

オートボクシング(オートボクシング)

宣言Integer配列リストオブジェクトをと3人の値を追加Integerするオブジェクトを。

// 由于值包装在对象中,ArrayList<Integer>的效率远低于int[]数组。
ArrayList<Integer> list = new ArrayList<>();
// 等价于list.add(Integer.valueOf(3));
list.add(3);

逆に、Integerオブジェクトが割り当てられているint時間変数、それは意志自動的にアンパック

// 编译器将以下语句翻译成int n = list.get(i).inValue();
int n = list.get(i);

これは、算術式で自動的にボクシングとアンボクシングすることができます。

Integer n = 3;
// 编译器会自动地插入一条对象拆箱指令,在自增计算执行后,执行装箱指令。
n++;

ラッパーの比較

オブジェクトラッパー平等異なる基本タイプと:

Integer a = 1000;
Integer b = 1000;
// ==检测a和b是否指向同一个存储区域,结果是false
System.out.println(a == b);
// equals方法比较a和b包装的值,结果是true
System.out.println(a.equals(b));

:そこ値の基本的な種類の範囲の自動包装仕様はbooleanbytechar127との間の、-128〜127の間shortint同じメモリ領域を指し固定物に充填されます。

Integer a = 100;
Integer b = 100;
// 此时a和b指向同一个存储区域,结果是true
System.out.println(a == b);

異常はnull参照

ヌルシテ包装、オートボクシングを投げることがありNullPointerException、例外を:

Integer n = null;
// 由于n引用null,执行2 * n时会将n自动拆箱取值,抛出NullPointerException异常。
System.out.println(2 * n);

自動アップグレード

また、条件式を用いて混合Integerし、Double時にInteger値が昇格アンパックdouble、その後、として包装Double

Integer n = 1;
Double x = 2.0;
// n升级为Double,结果是1.0
System.out.println(true ? n : x);

:ボクシングとアンボクシングがあるコンパイラの代わりに仮想マシンの認識します、。コンパイラは、バイトコードのクラスを生成し、その後、必要なメソッド呼び出しを挿入します。

おすすめ

転載: www.cnblogs.com/aries99c/p/12388554.html