私たちは、基本データ型のバイト、短い、int型、長い、知っている 、フロート、ダブル、文字、ブール値を対応するラッパークラスは、バイト、ショート、整数、ロング、あるフロート、ダブル、文字、ブール。プレゼンテーションの種類の基本的なデータが参照するJavaベース(a)の8つの基本データ型
なぜ必要がパッケージ化?
JAVAは、不便の多くを引き起こした、クラスやメソッドのパラメータの多くは、オブジェクトを使用する必要があり、オブジェクト指向言語であるが、基本的なデータ型オブジェクト指向されていません。
以下のような:List<int> = new ArrayList<>();
それはでコンパイルすることはできません
この問題を解決するために、我々はパッケージを導入し、定義することで、基本的なタイプ「で包むオブジェクトがプロパティやメソッドなどのプロパティを、追加することができる持っているように、java.langパッケージにあります、」。
梱包および開梱
:基本データ型とパッケージがありますので、のような、それらの間の遷移に結合しています
public static void main(String[] args) {
Integer a = 0;
for(int i = 0; i < 100; i++){
a += i;
}
}
包装工程への基本データ型が「と呼ばれている梱包」。
「と呼ばれるパッケージングプロセスへの基本データ型ボックス化解除」。
開梱自動および自動包装
簡単開梱および梱包操作のためのJavaは、自動的に非常にプログラマを容易に入力ボックスの機能を提供します。だから、最後にそれを達成する方法ですか?
上記の例では、自動包装およびアンパック処理である、我々は、逆コンパイルツールによって得ます、
public static void main(String[] args) {
Integer a = Integer.valueOf(0);
for (int i = 0; i < 100; i++) {
a = Integer.valueOf(a.intValue() + i);
}
}
我々は簡単に、メインの2つのメソッドを呼び出して、見つけることができますInteger.intValue()とInteger.valueOf(int型I)メソッドを
ビュー整数源は、我々は、対応するコードを見つけます:
/**
* Returns the value of this {@code Integer} as an
* {@code int}.
*/
public int intValue() {
return value;
}
/**
* Returns an {@code Integer} instance representing the specified
* {@code int} value. If a new {@code Integer} instance is not
* required, this method should generally be used in preference to
* the constructor {@link #Integer(int)}, as this method is likely
* to yield significantly better space and time performance by
* caching frequently requested values.
*
* This method will always cache values in the range -128 to 127,
* inclusive, and may cache other values outside of this range.
*
* @param i an {@code int} value.
* @return an {@code Integer} instance representing {@code i}.
* @since 1.5
*/
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
もちろん、私たちは私たちに来て、Javaはあなたが内部の詳細を隠すのに役立ちます。
アンパック処理はintValue()メソッドを呼び出す整数エンティティによるものです。
パッキングプロセスはInteger.valueOf(int型I)法と呼ばれる、新しいIntegerオブジェクトの直接助けます
だから、私に自動的に有効にどのような場所になりますか?
実際には、非常に単純な
1.コレクションに追加、自動化されたパッキング
2.動作時間に関する「除算、乗算、減算、追加」および「比較は、のcompareToに等しい」、自動アンパック
注意的点
上記のコードでは、整数のvalueOf上(Iするint)メソッドはIntegerCacheクラスを有し、条件決意処理は、オートボクシングであります
if (i >= IntegerCache.low && i <= IntegerCache.high)
コメントと合わせて
このメソッドは常に、範囲-128〜127の値をキャッシュします
包括的、かつ、この範囲外の他の値をキャッシュすることができます。
この範囲外の値も可能であるが、キャッシュ方法は、常に、-128と127の間の値をキャッシュ:効果。
なぜキャッシュのでしょうか?実際には、IntegerCacheのソースコードは、答えを得ることができます
String integerCacheHighPropValue =
sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
if (integerCacheHighPropValue != null) {
try {
int i = parseInt(integerCacheHighPropValue);
i = Math.max(i, 127);
// Maximum array size is Integer.MAX_VALUE
h = Math.min(i, Integer.MAX_VALUE - (-low) -1);
} catch( NumberFormatException nfe) {
// If the property cannot be parsed into an int, ignore it.
}
}
キャッシュの最大値は設定されているため。この設計では、我々はアプリケーションの実際の状況のパフォーマンスを向上させるために調整するための柔軟性を持っている、いくつかの利点を有しています。
同様にあります。
バイトとByteCache、-128〜127のバッファ値の範囲は、構成が固定されていません
短いとShortCache、バッファ値-128〜127の範囲は、構成が固定されていません
長いLongCache、バッファ値-128〜127の範囲は、構成が固定されていません
文字とCharacterCache、0から127までのバッファの範囲は、構成が固定されていません