プリミティブ型にはデフォルト値がありますが、ラッパー型は初期値が null です。Alibaba の仕様によれば、すべての POJO クラスはパッケージ化タイプを使用する必要があり、ローカル変数には基本タイプを使用することが推奨されています。
Java 言語には 8 つの基本的な型が用意されています。6 つの数値型 (4 つの整数、2 つの浮動小数点型)、文字型、およびブール型。
1. 整数: int、short、byte、long を含み、初期値は 0 です。
2. 浮動小数点型:float、doubleの初期値は0.0
3. 文字: char の初期値はスペース、つまり '' です。出力した場合、その効果はコンソールに表示されません。
4. ブール値: ブール値の初期値は false
基本タイプ | サイズ | 最小値 | 最大値 |
ブール値 | ----- | ----- | ------ |
文字 | 16ビット | ユニコード0 | ユニコード 2^16-1 |
バイト | 8ビット | -128 | +127 |
短い | 16ビット | -2^15 | +2^15-1 |
整数 | 32ビット | -2^31 | +2^31-1 |
長さ | 64ビット | -2^63 | +2^63-1 |
浮く | 32ビット | IEEE754 | IEEE754 |
ダブル | 64ビット | IEEE754 | IEEE754 |
空所 |
知らせ:
表中の ^ はパワーを表します
Java は Unicode を使用し、2 バイトで 1 文字を表し、1 バイトは 16 ビットに相当します。
ラッパークラスの基本型
Integer、Long、Short、Byte、Character、Double、Float、Boolean、BigInteger、BigDecmail
このうち、BigInteger と BigDecimal は対応する基本型がなく、主に高精度演算に使用されますが、BigInteger は任意精度の整数をサポートします。
BigDecimal は、小数点を使用した任意精度の演算をサポートします
基本タイプ: int、double、float、long、byte、boolean、char
パッケージ化タイプ: integer、Double、Float、Long、Byte、Boolean、Char基本タイプの特徴
1. 基本的なデータ型は、パラメーターを渡すときに値の転送を使用します。
2. 基本型はスタック上に作成されます (リークの問題があります)
3. 創造は新しいものによって行われるのではない
パッケージタイプの特徴
1. 新規作成するか、直接割り当てます。
2. パラメータの受け渡しには、アドレスの受け渡し方法である「参照渡し」を使用します。
3. ヒープ上に作成される
4. データ型ラッパークラスの値は不変です
パッケージタイプの利点:
パッケージ型を作成するには、valueOf()、toString() など、基本型にはないメソッドを使用できます。また、値の代わりに int オブジェクトへの参照を渡したい場合は、ラッパー クラスのみを使用できます。
基本タイプとパッケージタイプの類似点と相違点:
1. Java ではすべてがオブジェクトですが、8 つの基本タイプはオブジェクトではありません。
2. 異なる宣言方法では、基本型は new キーワードを使用して作成する必要はありませんが、カプセル化された型は new キーワードが必要です。
3. 格納方法と格納場所が異なります。基本型は変数の値を直接格納し、スタックに保存することで効率的にアクセスできます。カプセル化型は参照を通じてインスタンスを指す必要があり、特定のインスタンスを指定する必要があります。ヒープに保存されます。
4. 初期値が異なるカプセル化型の初期値はnull、基本型の初期値は特定の型に依存します(例:int型の初期値は0、boolean型の初期値は0)間違い;
5. さまざまな使用方法: たとえば、コレクション クラスを使用する場合、パッケージ化タイプのみを使用できます。
6. ラッパー クラスを使用する必要がある場合と基本型を使用する必要がある場合は、基本的なビジネスによって異なります: このフィールドで null 値が許可されるかどうか、許可される場合はラッパー クラスを使用する必要があります。許可されない場合は、ベーシックタイプで十分です。ジェネリックスやリフレクションなどの関数を使用する場合は、ラッパー クラスを使用する必要があります。
ソースコード
Boolean
プロパティとコンストラクターを 見て 、どのようにラップされているかを確認してください。boolean
// final boolean类型的属性,通过构造方法注入值
private final boolean value;
// 构造方法 Boolean a = true 实际上就是调用这个方法
public Boolean(boolean value) {
this.value = value;
}
// 构造方法
public Boolean(String s) {
this(parseBoolean(s));
}
簡単に言うと、boolean で定義された属性には値が必要で、 Boolean
オブジェクトの値が の 場合null
、解凍処理中に NPE が発生します。
基本データ型とラッパー型は標準を使用します
注記:
ラッパークラスの割り当て方法は valueof ですが、Java 5.0 (1.5) 以降、JAVA 仮想マシン (Java 仮想マシン) は、基本型とそれに対応するラッパー クラスの間の自動変換を完了できるようになりました。したがって、代入、パラメータ転送、および数学的演算を実行するときに、ラッパー クラスを基本型と同じように使用しますが、これは、ラッパー クラスでのみ使用できるメソッドを基本型を通じて呼び出すことができるという意味ではありません。さらに、すべての基本型 (void を含む) のラッパー クラスは最終的な変更を使用するため、それらを継承して新しいクラスを拡張したり、そのメソッドをオーバーライドしたりすることはできません。
valueof のソース コードを見て、キャッシュ メカニズムを理解してください。
public static Integer valueOf(int i) {
assert IntegerCache.high>= 127;
if (i >= IntegerCache.low&& i <= IntegerCache.high)
return IntegerCache.cache[i+ (-IntegerCache.low)];
return new Integer(i);
}
各パッケージング クラスのキャッシュ値の範囲は次のとおりです。
boolean: true、false
byte: -128~127
char: 0~127
short: -128~127
int: -128~127
long: -128~127
float、doubleはキャッシュされません
キャッシュ範囲内の値は、開かれた空間、または新しいオブジェクトに相当します。
Java -- 整数の定数キャッシュ プール (デフォルト -128 ~ 127 の値の範囲)_整数キャッシュ データ範囲 - CSDN ブログ