2013-07-01 47 views
1

即使我設置了Long類型的列表,我仍然可以沒有任何錯誤地執行此操作。 我應該知道有什麼潛在的問題嗎?是否有添加原始Int而不是Int對象的風險?

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

http://docs.oracle.com/javase/tutorial/java/data/autoboxing.html - 它幾乎從你要求的東西開始。 –

回答

9

不可以。原始長度將被自動裝盒成一長。

什麼可能導致問題是逆向操作:

long foo = list.get(0); 

這將拆箱長到長,會拋出一個NullPointerException如果null被存儲在列表中。

2

有沒有我應該知道任何潛在的問題?

不,不會有任何問題。編譯器從Java版本1.5+,將執行自動裝箱在這種情況下將long文字轉換爲Long對象。

然而,你應該在執行自動拆箱(從Longlong),作爲一個拆箱參考null將導致NPE要小心。

例如:

list.add(null); 
long val = list.get(0); // NPE will be thrown here. 
1

沒有與此沒有任何問題,因爲(現代的版本),Java可以自動的對象和基本類型之間轉換的情況下像這樣的。這就是所謂的自動裝箱。

4

沒有問題。在java中有一個叫做Autoboxing的東西。

這個link會幫助你。

按照JLS -

正如任何Java程序員都知道,你不能把一個int(或其他原始值)到一個集合。集合只能保存對象引用,所以你必須將原始值裝入適當的包裝類(在int情況下爲Integer)。當你把對象從集合中取出時,你得到了你放入的Integer;如果您需要int,則必須使用intValue方法取消Integer。所有這些拳擊和拆箱都是一件痛苦的事情,並且會讓你的代碼混亂不堪。自動裝箱和取消裝箱功能可自動執行此過程,消除疼痛和混亂。

相關問題