1

リストを Long 型に設定しても、エラーなく実行できます。知っておくべき潜在的な問題はありますか?

long num = 12L;
List<Long> list = new ArrayList<Long>();
list.add(num)
4

4 に答える 4

9

いいえ。プリミティブ long は、自動的に Long にボックス化されます。

問題を引き起こす可能性があるのは、逆の操作です。

 long foo = list.get(0);

これにより、Long が long にアンボックスされ、null がリストに格納されている場合は NullPointerException がスローされます。

于 2013-07-01T21:49:15.613 に答える
4

問題はない。AutoboxingJavaのように呼ばれるものがあります。

このリンクが役立ちます。

JLSによると -

Java プログラマーなら誰でも知っているように、int (またはその他のプリミティブ値) をコレクションに入れることはできません。コレクションはオブジェクト参照しか保持できないため、プリミティブ値を適切なラッパー クラス (int の場合は Integer) にボックス化する必要があります。コレクションからオブジェクトを取り出すと、入れた整数が得られます。int が必要な場合は、intValue メソッドを使用して Integer をアンボックスする必要があります。このボックス化とボックス化解除はすべて面倒であり、コードが乱雑になります。自動ボックス化およびボックス化解除機能により、プロセスが自動化され、手間と煩雑さが解消されます。

于 2013-07-01T21:48:20.840 に答える
2

知っておくべき潜在的な問題はありますか?

いいえ、問題ありません。Java バージョン 1.5+ のコンパイラは、この場合、自動ボクシングlongを実行してリテラルをLongオブジェクトに変換します。

ただし、参照をボックス化解除するLongと.longnullNPE

例えば:

list.add(null);
long val = list.get(0);  // NPE will be thrown here.
于 2013-07-01T21:47:46.983 に答える
1

(最新バージョンの) Java は、このような状況でオブジェクトとプリミティブ型の間で自動的に変換できるため、これに問題はありません。いわゆるオートボクシングです。

于 2013-07-01T21:47:53.630 に答える