2016-06-12 28 views
1

Object[]は、Javaのすべてのクラスがjava.lang.Objectを拡張するため、任意のクラスのオブジェクトを格納できます。なぜオブジェクト[]はプリミティブを格納できますか?

私はプリミティブがObjectから伸びるとは思わないので、なぜそれらを次のように保存できますか?プリミティブは、オブジェクトの配列に格納することができ、オートボクシングは上記のコードで起こるかなかった理由

Object[] obj_arr = {1, 2, 1.2, 'a', false, new MyClass(), null}; 

質問はありますか?

+1

あなたは 'instanceof'を使ってあなた自身が自動ボクシングをチェックできることを確かめましたか? –

+0

コードを実行すると、autoboxingはラッパータイプに '1'と' 2'を変更します。 – Meinkraft

+0

関連:http://stackoverflow.com/questions/27647407/why-do-we-use-autoboxing-and-unboxing-in-java –

答えて

6

プリミティブ型はそう例えば、それぞれのラッパ型に自動箱詰め得る:1Integer.valueOf(1)なり、それはObjectから延びるIntegerクラスのインスタンスの、従ってそれはObject[]に格納することができます。他のプリミティブでも同様のことが起こります。DoubleCharacterBooleanのインスタンスが、対応するプリミティブ値の代わりに使用されます。

+6

実際、オートボクシングは'1 'を' new Integer(1) 'でなく' Integer.valueOf(1) 'で置き換えます。これはキャッシュされた' Integer'オブジェクトを返すかもしれません。 – Jesper