Java基礎系列1:Java基本類型與封裝類型 當初學習電腦的時候,教科書中對程式的定義是:程式=數據結構+演算法,Java基礎系列第一篇就聊聊Java中的數據類型。 本篇聊Java數據類型主要包括兩個內容: Java基本類型 Java封裝類型 Java基本類型 Java基本類型分類、大小及表示範圍 ...
Java基礎系列1:Java基本類型與封裝類型
當初學習電腦的時候,教科書中對程式的定義是:程式=數據結構+演算法,Java基礎系列第一篇就聊聊Java中的數據類型。
本篇聊Java數據類型主要包括兩個內容:
- Java基本類型
- Java封裝類型
Java基本類型
Java基本類型分類、大小及表示範圍
Java的基本數據類型總共有8種,包括三類:數值型,字元型,布爾型,其中
- 數值型:
- 整數類型:byte、short、int、long
- 浮點類型:float、double
- 字元型:char
- 布爾型:boolean
字元類型在記憶體中占有2個位元組,可以用來保存英文字母等字元。電腦處理字元類型時,是把這些字元當成不同的整數來看待,即ASKII碼,因此,嚴格來說,字元類型也算是整數類型的一種。
Java的這8種基本類型的大小,即所占用的存儲位元組數,以及可以表示的數據範圍如下表所示:
Java基本類型之間的轉換
Java是強類型的編程語言,其數據類型在定義時就已經確定了,因此不能隨意轉換成其他的數據類型,但是Java允許將一種類型賦值給另一種類型。
在Java中,boolean類型與其他7種類型的數據都不能進行轉換,這一點很明確。
但對於其他7種數據類型,它們之間都可以進行轉換,只是可能會存在精度損失或其他一些變化。轉換分為自動轉換和強制轉換:
- 自動類型轉換(隱式):無需任何操作
- 強制類型轉換(顯式):需使用轉換操作符
自動類型轉換需要滿足如下兩個條件:
- 轉換前的數據類型與轉換後的數據類型相容;
- 轉換後的數據類型的表示範圍比轉換前的類型大。
如果將6種數值類型作如下排序:
1
|
double > float > long > int > short > byte
|
那麼從小轉換到大,那麼可以直接轉換,而從大到小,或char或其他6種數據類型轉換,則必須使用強制轉換,且可能會發生精度損失。
Java基本數據類型的預設值
在某些場景下,比如在Restful API介面中,如果在dto中使用了基本類型的參數,那麼即使請求體中沒有傳該參數,伺服器在做反序列化的時候也會將該參數以預設值來處理。所以在實際開發的dto中務必不要使用基本類型。
以下是Java基本數據類型的預設值:
Java封裝類型
對於上面的8種基本類型,Java都有對應的封裝類型:
基本類型 | byte | int | short | float | double | long | boolean | char |
---|---|---|---|---|---|---|---|---|
封裝類型 | Byte | Integer | Short | Float | Double | Long | Boolean | Character |
基本類型 vs 封裝類型
Java封裝類型與基本類型相比,有如下區別:
- 從參數傳遞上來說,基本類型只能按值傳遞,而每個封裝類都是按引用傳遞的;
- 從存儲的位置上來說,基本類型是存儲在棧中的,而所有的對象都是在堆上創建和存儲的,所以基本類型的存取速度要快於在堆中的封裝類型的實例對象;JDK5.0開始可以自動封包了 ,也就是基本數據可以自動封裝成封裝類,基本數據類型的好處就是速度快(不涉及到對象的構造和回收),封裝類的目的主要是更好的處理數據之間的轉換,方法很多,用起來也方便。
- 基本類型的優勢是:數據存儲相對簡單,運算效率比較高;
- 封裝類型的優勢是:類型轉換的api更好用了,比如Integer.parseInt(*)等的,每個封裝類型都提供了parseXXX方法和toString方法。而且在集合當中,也只能使用封裝類型。封裝類型滿足了Java中一切皆對象的原則。
下一篇,將介紹Java類型中的自動拆箱與封箱,以及緩存機制。