Java提供了一組基本數據類型,包括boolean, byte, char, short, int, long, float, double, void. 同時,java也提供了這些類型的封裝類,分別為Boolean, Byte, Character, Short, Integer, Long, Float, Double, Void。
既然提供了基本類型,為什麼還要使用封裝類呢?
- 某些情況下,數據必須作為對象出現,此時必須使用封裝類來將簡單類型封裝成對象。
- 比如,如果想使用List來保存數值,由於List中只能添加對象,因此我們需要將數據封裝到封裝類中再加入List。在JDK5.0以後可以自動封包,可以簡寫成list.add(1)的形式,但添加的數據依然是封裝後的對象。
- 另外,有些情況下,我們也會編寫諸如func(Object o)的這種方法,它可以接受所有類型的對象數據,但對於簡單數據類型,我們則必須使用封裝類的對象。
- 某些情況下,使用封裝類使我們可以更加方便的操作數據。比如封裝類具有一些基本類型不具備的方法,比如valueOf(), toString(), 以及方便的返回各種類型數據的方法,如Integer的shortValue(), longValue(), intValue()等。
基本數據類型與其對應的封裝類由於本質的不同,具有一些區別:
- 基本數據類型只能按值傳遞,而封裝類按引用傳遞。
- 基本類型在堆棧中創建;而對於對象類型,對象在堆中創建,對象的引用在堆棧中創建。基本類型由於在堆棧中,效率會比較高,但是可能會存在內存洩漏的問題。