Java的簡單數據講解列表以下:編程
int:int爲整數類型,存儲的時候,用4個字節存儲,範圍爲-2,147,483,648到2,147,483,647,在變量初始化的時候,int類型的默認值爲0。
short:short也屬於整數類型,在存儲的時候,用2個字節存儲,範圍爲-32,768到32,767,在變量初始化的時候,short類型的默認值爲0,通常狀況下,由於Java自己轉型的緣由,能夠直接寫爲0。
long:long也屬於整數類型,在存儲的時候,用8個字節存儲,範圍爲-9,223,372,036,854,775,808到9,223,372,036, 854,775,807,在變量初始化的時候,long類型的默認值爲0L或0l,也可直接寫爲0。app
byte:byte一樣屬於整數類型,在存儲的時候,用1個字節來存儲,範圍爲-128到127,在變量初始化的時候,byte類型的默認值也爲0。
float:float屬於實數類型,在存儲的時候,用4個字節來存儲,範圍爲32位IEEEE 754單精度範圍,在變量初始化的時候,float的默認值爲0.0f或0.0F,在初始化的時候能夠寫0.0。
double:double一樣屬於實數類型,在存儲的時候,用8個字節來存儲,範圍爲64位IEEE 754雙精度範圍,在變量初始化的時候,double的默認值爲0.0。
char:char屬於字符類型,在存儲的時候用2個字節來存儲,由於Java自己的字符集不是用ASCII碼來進行存儲,是使用的16位Unicode字符集,它的字符範圍便是Unicode的字符範圍,在變量初始化的時候,char類型的默認值爲'u0000'。
boolean:boolean屬於布爾類型,在存儲的時候不使用字節,僅僅使用1位來存儲,範圍僅僅爲0和1,其字面量爲true和false,而boolean變量在初始化的時候變量的默認值爲false。函數
Java引用數據類型:測試
String:google
字符串類,顧名思義,就是操做字符串的類。能夠用來存儲字符串。spa
3)相關介紹:
在Java基本類型在使用字面量賦值的時候,有幾個簡單的特性以下:設計
【1】當整數類型的數據使用字面量賦值的時候,默認值爲int類型,就是直接使用0或者其餘數字的時候,值的類型爲int類型,因此當使用long a = 0這種賦值方式的時候,JVM內部存在數據轉換。
【2】當實數類型的數據使用字面量賦值的時候,默認值爲double類型,就是當字面兩出現的時候,JVM會使用double類型的數據類型。 (*:以上兩點在轉型中進行詳細說明。)
【3】從JDK 5.0開始,Java裏面出現了自動拆箱解箱的操做,基於這點須要作必定的說明:
對應原始的數據類型,每種數據類型都存在一個複雜類型的封裝類,分別爲Boolean、Short、Float、Double、Byte、Int、Long、Character,這些類型都是內置的封裝類,這些封裝類(Wrapper)提供了很直觀的方法,針對封裝類須要說明的是,每種封裝類都有一個xxxValue()的方法,經過這種方法能夠把它引用的對象裏面的值轉化成爲原始變量的值,不只僅如此,每一個封裝類都還存在一個valueOf(String)的方法直接把字符串對象轉換爲相應的簡單類型。 在JDK 5.0以前,沒有存在自動拆解箱的操做,即Auto Box操做,因此在這以前是不能使用如下方式的賦值代碼的:
Integer a = 0; //這種賦值方式不可以在JDK 1.4以及如下的JDK編譯器中經過
可是JDK 5.0出現了自動拆解箱的操做,因此在JDK 5.0以上的編譯器中,以上的代碼是能夠經過的,關於自動拆箱解箱我會另外用一篇1.4到5.0的升級加以詳細說明。 code
Java中簡基本數據類型的轉型:
Java中的簡單數據類型的轉換分爲兩種:自動轉換和強制轉換 對象
1)自動轉換:
當一個較「小」的數據和較「大」的數據一塊兒運算的時候,系統將自動將較「小」的數據轉換爲較「大」的數據,再進行運算。
在方法調用過程,若是實際參數較「小」,而函數的形參比較「大」的時候,除非有匹配的方法,不然會直接使用較「大」的形參函數進行調用。ci
2)強制轉換:
將「大」數據轉換爲「小」數據時,可使用強制類型轉換,在強制類型轉換的時候必須使用下邊這種語句: int a = (int)3.14;
只是在上邊這種類型轉換的時候,有可能會出現精度損失。 關於類型的自動提高,遵循下邊的規則: 全部的byte、short、char類型的值將提高爲int類型; 若是有一個操做數是long類型,計算結果是long類型; 若是有一個操做數是float類型,計算結果是float類型;
若是有一個操做數是double類型,計算結果是double類型;
自動類型轉換圖以下:
byte->short(char)->int->long->float->double 若是是強制轉換的時候,就將上邊的圖反過來
3)轉換附加:
當兩個類型進行自動轉換的時候,須要知足條件:
【1】這兩種類型是兼容的,
【2】目的類型的數值範圍應該比源轉換值的範圍要大。而拓展範圍就遵循上邊的自動類型轉換樹,當這兩個條件都知足的時候,拓輾轉換纔會發生,而對於幾個原始類型轉換過程,根據兼容性boolean和char應該是獨立的,而其餘六種類型是能夠兼容的,在強制轉換過程,惟獨可能特殊的是char和int是能夠轉換的,不過會使用char的ASCII碼值好比: int a = (int)'a';
a的值在轉換事後輸出的話,值爲97;
Java中的高精度數:
Java提供了兩個專門的類進行高精度運算:BigInteger與BigDecimal,雖然Java原始變量都具備對應的封裝類型,可是這兩個變量沒有對應的原始類型,而是經過方法來提供這兩種類型的一些運算,其含義爲普通類型可以作的操做,這兩個類型對應都有,只是由於精度過大可能效率不夠高。至於這兩個類的具體操做能夠參考JDK的相關API文檔。
5.關於數據類型的一些技巧:(如下爲參考一篇原文文檔) 若要求精度的結果,儘可能避免使用float和double:
float和double類型自己是爲了作科學運算,即執行二進制浮點運算而設計,可是卻不能提供徹底精確的結果,因此在要求精度的數值中,避免使用float和double,float和double在貨幣運算中尤爲不合適,要讓float和double精確表達0.1也是不可能的事。測試一下下邊這段代碼就明白了:
System.out.println(2.02-0.42);
結果是否是出乎意料,這個結果並非偶然,而是JVM自己設計的目的決定的。而要解決這個問題,最好的辦法是使用BigDecimal、int或者long進行相關運算,特別是貨幣運算,使用BigDecimal代替double是一個很好的辦法。 BigDecimal惟一的缺點在於:BigDecimal沒有相對應的原始類型,因此在進行基本數值運算的時候,須要進行方法調用才能操做,這樣會使得和咱們的編程習慣不相符合,若使用int和long,就須要進行簡單的封裝運算。 因此在要求精度答案的計算任務裏面,通常慎用float和double,若是在進行商務運算,而且要求四捨五入或者簡單的舍入行爲,使用BigDecimal可能更加方便。因此儘可能避免在精度運算中使用float和double,特別是咱們經常使用的貨幣運算。 5.總結: 以上是開發過程當中針對Java數據類型的一份總結,最後一個技巧是在一個商務系統運算的時候發現的,而後參考了網上的不少文檔,偶然在一篇BLOG中發現的,原文提倡在精度運算中儘可能不用float和double,而關於Java的基本數據類型,上邊應該涵蓋了全部開發會用到的內容,還有一點就是在於幾個特殊值的比較,這裏沒有作說明,好比Double.NaN == Double.NaN輸出爲false,等等全部封裝類的特殊類型,沒有進行詳細說明。 原文地址:http://docs.google.com/Doc?docid=0AXJpK9YuEe6pZGM5ZDd3ODNfN2d3NWhwcWc4&hl=en