7

次のコードは完璧に機能し、リストに 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);
4

2 に答える 2

14

これはオートボクシングと呼ばれます。これは、プリミティブを対応するオブジェクト タイプに自動的に変換する機能です。Java 1.5 から存在します。

autoboxing の反対は autounboxing と呼ばれますが、NullPointerException に注意してください

于 2012-05-08T19:16:13.263 に答える
1

これはオートボクシングと呼ばれます。

それでも自動的にtrueShortオブジェクトが作成され、これらはIntegerオブジェクトと同じようにヒープ上で16バイトを占めることに注意してください。ネイティブshort値のみが2バイトしか占有しません(ただし、に入れることはできませんjava.util.collections)。

多くの状況で

list.put((short) 12345);
list.put((short) 12345);

実際には、そのようなオブジェクトを2つ作成します。つまり、32バイトとリストオブジェクトが占有するメモリです。リストに格納されているポインタは、すでにそれぞれ4〜8バイトを占めています。

あなたがほんの少しのインスタンスを持っているなら、それは大丈夫です。数百万の場合、これはメモリの管理と使用のためにパフォーマンスに悪影響を与える可能性があります。生のショートパンツを使用すると、通常、速度が低下したりメモリが不足したりする前に、10倍の距離を移動できます。

于 2012-05-08T19:21:54.313 に答える