ホームページ >Java >&#&チュートリアル >Java は自動ボックス化とボックス化解除をどのように処理しますか?
Java での自動ボクシングとボクシング解除: 包括的な説明
プリミティブ データ型とそれに対応するラッパー クラスの間の自動変換 (オート ボクシングと呼ばれます)およびアンボックス化は、Java 5.0 で導入されました。その単純さにもかかわらず、このメカニズムの内部動作を理解するのは複雑な場合があります。
オート ボクシング: コンストラクター ベースのメカニズム
当初の想定に反して、オート ボクシングは、コンストラクターのみに依存します。代わりに、ラッパー クラスの valueOf() メソッドが呼び出されます。このメソッドによりキャッシュが可能になり、不必要なオブジェクトの作成が回避されます。
たとえば、ステートメント:
Integer n = 42;
は次のようにコンパイルされます:
invokestatic #16 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
ボックス化解除: 取得プリミティブ値
アンボックス化すると、ラッパーオブジェクトからのプリミティブ値。自動ボクシングと同様に、ラッパー クラスの intValue() メソッドが使用されます。
たとえば、ステートメント:
int n = Integer.valueOf(42);
は次のようにコンパイルされます:
invokevirtual #22 // Method java/lang/Integer.intValue:()I
ルールの例外
自動ボックス化とボックス化解除通常はシームレスに実行されますが、例外もあります。たとえば、バイト値を Integer オブジェクトにボックス化する場合、コンパイラは次のエラーをスローします。
intObject = byteValue; // ==> Error
この制限は、Integer ラッパー クラスにバイト パラメーターを持つコンストラクターが欠如しているために発生します。
さらなる考慮事項
Java 言語仕様(JLS) の自動ボックス化変換とアンボックス化変換については、それぞれ §5.1.7 と §5.1.8 で詳しく説明されています。基礎となるメカニズムと特殊なケースについての包括的な理解を提供します。
以上がJava は自動ボックス化とボックス化解除をどのように処理しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。