整数ラッパー オブジェクトと共有インスタンス: 127 の値を超える
Java プログラミング言語には、プリミティブ データ型をオブジェクトとして表すラッパー クラスが用意されています。 。 Integer は、int プリミティブ型をラップするラッパー クラスの 1 つです。 Integer ラッパー オブジェクトの興味深い点は、共有インスタンスに関する動作です。
127 の範囲内
質問が正しく観察しているように、Integer ラッパー オブジェクトは確かに同じものを共有します。 [-128, 127] の値の範囲内のインスタンス。この動作は、Java 言語仕様 (JLS) のセクション 5.1.7 で明示的に定義されています。
If the value p being boxed is ... an int or short number between -128 and 127 (inclusive), then ... any two boxing conversions of p ... will always yield an identical reference.
これは、この値の範囲内で、同じプリミティブ int 値を表すすべての Integer ラッパー オブジェクトが、メモリ内の同じインスタンス。
Beyond 128
ただし、この共有動作は値 128 を超えて継続しません。指定された範囲 [-128, 127] の外にある int 値が Integer オブジェクトにボックス化される場合、実装は自由に作成できます。一意の値ごとに新しいインスタンス。これは、同じセクションの JLS によって確認されています。
This formulation disallows any assumptions about the identity of the boxed values on the programmer's part. This would allow (but not require) sharing of some or all of these references.
要約すると、整数ラッパー オブジェクトは、値の範囲 [-128, 127] 内でのみ同じインスタンスを共有します。これは、Java 言語によって明示的に指定されているためです。仕様。この最適化により、この範囲を超える一意の値に対して異なるインスタンスを使用する柔軟性を損なうことなく、この範囲内のプリミティブ値を含む一般的なシナリオでパフォーマンス上の利点が得られます。
以上がJava の整数ラッパー オブジェクトが -128 ~ 127 の間のインスタンスのみを共有するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。