java基础包的基本信息_JAVA 基础 之 基本数据类型、引用类型和包...
java中數據類型有兩類
基本數據類型
引用類型
基本數據類型
整數型
byte - 8bit
short - 16bit
int - 32bit
long - 64bit 【賦值時一般在數字后加上** L**(大小寫都可以,建議大寫與數字1或字母i大寫區分開)】
浮點型
float - 32bit 【直接賦值時必須在數字后加上 F(大小寫都可以)】
double - 64bit【d/D】
字符型
char - 16bit
布爾型
boolean - 1byte/4byte【只有true或false值,有人疑問為什么boolean類型有兩個不同的字節,下方會講解到】
《Java虛擬機規范》一書中的描述:“雖然定義了boolean這種數據類型,但是只對它提供了非常有限的支持。在Java虛擬機中沒有任何供boolean值專用的字節碼指令,Java語言表達式所操作的boolean值,在編譯之后都使用Java虛擬機中的int數據類型來代替,而boolean數組將會被編碼成Java虛擬機的byte數組,每個元素boolean元素占8位”。這樣我們可以得出boolean類型占了單獨使用是4個字節,在數組中又是1個字節。
虛擬機為什么要用int來代替boolean呢?為什么不用byte或short,這樣不是更節省內存空間嗎。大多數人都會很自然的這樣去想,我同樣也有這個疑問,經過查閱資料發現,使用int的原因是,對于當下32位的處理器來說,一次處理數據是32位(這里不是指的是32/64位系統,而是指CPU硬件層面),具有高效存取的特點。
根據http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html官方文檔的描述:
boolean: The boolean data type has only two possible values: true and false. Use this data type for simple flags that track true/false conditions. This data type represents one bit of information, but its “size” isn’t something that’s precisely defined.
布爾類型:布爾數據類型只有兩個可能的值:真和假。使用此數據類型為跟蹤真/假條件的簡單標記。這種數據類型就表示這一點信息,但是它的“大小”并不是精確定義的。
可以看出,boolean類型沒有給出精確的定義,《Java虛擬機規范》給出了4個字節,和boolean數組1個字節的定義,具體還要看虛擬機實現是否按照規范來,所以1個字節、4個字節都是有可能的。這其實是運算效率和存儲空間之間的博弈,兩者都非常的重要。
基本數據類型和引用類型的區別
概念層次
基本類型:變量名指向具體值
引用類型:變量名指向存數據對象的內存地址
內存層次
基本類型:變量在聲明后,jvm會立即給它分配內存空間
引用類型:變量在聲明后不會立即分配內存空間,只儲存一個內存地址(類似于C的指針)
判斷是否相等
基本類型:使用時需要賦值具體值,使用==判斷
應用類型:使用時可以賦值null,判斷一般使用equals方法
包裝類,裝箱、拆箱
Java為每一種基本數據類型都提供了對應的包裝類
Byte => bye
Short => short
Integer => int
Long => long
Float => float
Double => double
Character => char
Boolean =>boolean
引入包裝類的目的就是:提供一種機制,使得基本數據類型可以與引用類型互相轉換。
裝箱【將基本數據類型轉化為引用類型】
裝箱過程是通過調用包裝類的 valueOf 方法實現的。
拆箱【將引用類型轉化為基本數據類型】
拆箱過程是通過調用包裝類的 xxxValue 方法實現的(xxx 代表對應的基本數據類型)。
自動裝箱、自動拆箱
基本數據(Primitive)型的自動裝箱(boxing)拆箱(unboxing)自 JDK 5 開始提供的功能。
自動裝箱與拆箱的機制可以讓我們在 Java 的變量賦值或者是方法調用等情況下使用原始類型或者對象類型更加簡單直接。
因為自動裝箱會隱式地創建對象,如果在一個循環體中,會創建無用的中間對象,這樣會增加 GC 壓力,拉低程序的性能。所以在寫循環時一定要注意代碼,避免引入不必要的自動裝箱操作。
Integer num = 10; // 自動裝箱,沒有通過new的方式創建對象
Integer num2 = new Integer(10) // 非自動裝箱
裝箱、拆箱的應用
一種最普通的場景是:調用一個含類型為 Object 參數的方法,該 Object 可支持任意類型(因為 Object 是所有類的父類),以便通用。當你需要將一個值類型(如 int)傳入時,需要使用 Integer 裝箱。
另一種用法是:一個非泛型的容器,同樣是為了保證通用,而將元素類型定義為 Object。于是,要將值類型數據加入容器時,需要裝箱。
當 == 運算符的兩個操作,一個操作數是包裝類,另一個操作數是表達式(即包含算術運算)則比較的是數值(即會觸發自動拆箱的過程)。
裝箱、拆箱的注意點
裝箱操作會創建對象,頻繁的裝箱操作會造成不必要的內存消耗,影響性能。所以應該_盡量避免裝箱_。
基礎數據類型的比較操作使用 ==,包裝類的比較操作使用 equals 方法
總結
以上是生活随笔為你收集整理的java基础包的基本信息_JAVA 基础 之 基本数据类型、引用类型和包...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 编程思想 笔记_java编程思
- 下一篇: java checkstyle 导入_C