次のコードは完璧に機能し、リストに 1 と 2 の値を追加しますが、なぜでしょうか? Short オブジェクトを明示的に作成する必要がないのはなぜですか? 例えば:list.add(new Short(1));
List<Short> list = new ArrayList();
list.add((short)1);
list.add((short)2);
System.out.println(list);
次のコードは完璧に機能し、リストに 1 と 2 の値を追加しますが、なぜでしょうか? Short オブジェクトを明示的に作成する必要がないのはなぜですか? 例えば:list.add(new Short(1));
List<Short> list = new ArrayList();
list.add((short)1);
list.add((short)2);
System.out.println(list);
これはオートボクシングと呼ばれます。これは、プリミティブを対応するオブジェクト タイプに自動的に変換する機能です。Java 1.5 から存在します。
autoboxing の反対は autounboxing と呼ばれますが、NullPointerException に注意してください
これはオートボクシングと呼ばれます。
それでも自動的にtrueShort
オブジェクトが作成され、これらはIntegerオブジェクトと同じようにヒープ上で16バイトを占めることに注意してください。ネイティブshort
値のみが2バイトしか占有しません(ただし、に入れることはできませんjava.util.collections
)。
多くの状況で
list.put((short) 12345);
list.put((short) 12345);
実際には、そのようなオブジェクトを2つ作成します。つまり、32バイトとリストオブジェクトが占有するメモリです。リストに格納されているポインタは、すでにそれぞれ4〜8バイトを占めています。
あなたがほんの少しのインスタンスを持っているなら、それは大丈夫です。数百万の場合、これはメモリの管理と使用のためにパフォーマンスに悪影響を与える可能性があります。生のショートパンツを使用すると、通常、速度が低下したりメモリが不足したりする前に、10倍の距離を移動できます。