標籤:浮點數 莫名奇妙 邏輯 返回 bool 驗證 常用 class number
一、八種基礎資料型別 (Elementary Data Type)
1、整數類型
①byte 佔一個位元組。 常用作緩衝數組。
②short 佔兩個位元組 。
③int 佔四個位元組。 最常用。
④long 佔8個位元組。注意long類數值後面有一個尾碼L。
注意:*Java沒有無符號(unsigned)整數。
*所有的數實值型別所佔據的位元組數與平台無關,保證了可移植性。
2、浮點類型
①float 佔四個位元組。尾碼帶有一個F。例:float f=3.4L;
②double 佔8個位元組。預設是double類型。例:3.14
注意:*double的精度是float的兩倍,一般情況下能夠使用double就不要使用float,否則使用不當容易出現意想不到的異常。
現代電腦搞運算能力下,可以忽略它們被處理的速度差異。
*有三個特殊的浮點數值:正無窮大(Double.POSITIVE_INFINITY)、負無窮大(Double.NAGATIVE_INFINITY)、NaN(Double.NaN)。
則三種數值一般很少用到。另外判斷非數值不能使用==號,而是使用Double.isNaN(驗證對象)。
*浮點數不能使用在禁止出現四捨五入的場合,比如金融計算中。浮點數相乘除和相減都會出現誤差。金融計算可以使用BigDecimal類,或者
藉助第三方庫。
3、文本類型
①char 字元常量為單引號括起來的字元。
注意:*Java字元採用Unicode編碼。一個字元佔兩個位元組(一個字元是肯定可以容納一個漢字的)。
4、邏輯類型
①boolean
注意:Java中不可以使用0或者非0的整數代替true或false。這點與c不同要小心。
5、引用資料類型(類、介面、數組)
二、數值之間的類型轉換
當整型、字元型、浮點型資料在混合計算中相互轉換的時候(Boolean類型不可以轉換為其它類型,再次強調它不能夠轉換為0或1),遵循以下轉換規則
1、向上轉型(自動轉換)
精度小的類型會自動轉換為精度大的類型:byte、char、short->int->long->float->double。byte、char、short不會直接相互轉換,它們在轉換過程中先要轉換
為int類型。
2、向下轉型(強制轉換)
精確度大的類型轉換為精確度小的類型:需要加上強制轉換符。但要十分小心,很容易造成精度下降或者溢出(有時候會造成莫名奇妙的bug)。
例如:short s1 = 1; s1 = s1 + 1;// 編譯錯誤。1是int類型,s1 + 1運算時s1會自動向上轉型成為int型,s1 + 1運行結果也為int型,賦值給s1的時候是向下轉型。需要強制轉換。
例如:而short s1 = 1; s1 += 1;// 正確編譯,因為s1+= 1;相當於s1 = (short)(s1 + 1);其中有隱含的強制類型轉換。
例如:float f=3.4;// 編譯錯誤。3.4是double類型,轉換為float類型時是向下轉型,需要強制轉換:float f = (float)3.4;
3、多種資料類型混合在一起計算的時候,要轉換為精度最大的資料類型後再進行計算。
三、一些常見的問題
1、Java一個漢字占幾個位元組:http://www.cnblogs.com/God-/p/6006749.html
2、基礎資料型別 (Elementary Data Type)的封裝類型
為了能夠將這些基礎資料型別 (Elementary Data Type)當成對象操作,Java為每一個基礎資料型別 (Elementary Data Type)都引入了對應的封裝類型(wrapper class),int的封裝類就是Integer,從Java 5開始引入了自動裝箱/拆箱機制,使得二者可以相互轉換。
Java 為每個原始類型提供了封裝類型:
- 原始類型: boolean,char,byte,short,int,long,float,double
- 封裝類型:Boolean,Character,Byte,Short,Integer,Long,Float,Double
一個與自動拆箱與裝箱的無聊問題:
public class Test03 { public static void main(String[] args) { Integer f1 = 100, f2 = 100, f3 = 150, f4 = 150; System.out.println(f1 == f2);// 返回true System.out.println(f3 == f4);// 返回false }} 原因:如果整型字面量的值在-128到127之間,那麼不會new新的Integer對象,而是直接引用常量池中的Integer對象,所以上面的面試題中f1==f2的結果是true,而f3==f4的結果是false 3、String是Java基礎資料型別 (Elementary Data Type)嗎? 當然不是。如果不是應屆畢業生,面試官問這個問題我感覺他在逗你玩。
Java基礎一:基礎資料型別 (Elementary Data Type)