2010-05-21 154 views
5

有人可以向我解釋在JAVA中使用Integer,Boolean等替換它們的基本類型嗎?對象或原始類型

我似乎無法把握他們提供的優勢。他們似乎創建了處理空值的不必要的問題。

謝謝!

回答

8

BooleanIntegerLong ...是對象。您可以在不能使用原始類型的地方使用它們,例如

  • 將它們存儲在像Map
  • 集合使用它們作爲模板參數
  • 以更一般的方式使用它們分配他們一個null
  • (例如LongNumber

示例:

new ArrayList<Integer>(); 
Long id = null; 
Number num = new Long(3); 
+0

要添加到答案中,一個實際的例子將存儲變量在會話上下文中的Web應用程序。 – saugata 2010-05-21 06:23:09

+0

不僅Map,所有的容器類都要求它們的元素是Object,因此原始類型不能滿足這個約束。我認爲容器是面向過程語言的面嚮對象語言的一個方面,它爲您帶來很多便利。 :-) – 2010-05-21 06:26:30

4

整數,布爾等的基本原理是允許基本類型在需要引用類型的上下文中使用。經典用例是集合API,它提供集合,列表,映射,隊列等,其中元素類型必須是某種引用類型。

因此我可以這樣寫:

List<Integer> list = new ArrayList<Integer>(); 

但下面是一個編譯錯誤:

List<int> list = new ArrayList<int>(); 

注意,該用例的基本包裝類型早都泛型類型和「新「收集API,並回溯到僅有的收集類型是原始(通用)形式的VectorHashtable及其同類的日子。

4

有時候你真的需要一個可以爲空的值,例如如果你的應用存儲用戶數據,社會安全#可能是未知的。在這種情況下,存儲空值而不是-1是更清潔的。

此外還有一些你不能用原始類型做的事情,比如將它們存儲在映射中或使用多態性(Double和Integer都是Number的實例)。

1

基元總是更快。
但是有次,當對象真的有用時:
1.向上轉換。您的函數可以將Number(對於所有數值對象爲整數,浮點數等)作爲參數。
2.可能的空值。例如,它在數據庫中存儲時使用。對象可以爲null,基元必須有價值。所以如果db中的字段爲空,最好使用原始值的對象版本。
3.如果函數帶有對象,並且您總是給它一個原型,那麼在自動裝箱(將原始對象轉換爲對象)上會有開銷。從函數返回一樣。
4.對象有一些特定的方法,比如getHashcode(),toString()等等,在某些情況下它確實有用。