轉載 8種基本資料型別
原文作者:我心蒼狼
一、八種基本型別資料(注:一個漢字2個位元組)
在Java中一共有8種基本資料型別,其中有4種整型,2種浮點型別,1種用於表示Unicode編碼的字元單元的字元型別和1種用於表示真值的boolean型別。(一個位元組等於8個bit)
1.整型 型別 儲存需求 bit數 取值範圍 備註 int 4位元組 4*8 short 2位元組 2*8 -32768~32767 long 8位元組 8*8 byte 1位元組 1*8 -128~127 2.浮點型 型別 儲存需求 bit數 取值範圍 備註 float 4位元組 4*8 float型別的數值有一個字尾F(例如:3.14F) double 8位元組 8*8 沒有後綴F的浮點數值(如3.14)預設為double型別 3.char型別 型別 儲存需求 bit數 取值範圍 備註 char 2位元組 2*8 4.boolean型別 型別 儲存需求 bit數 取值範圍 備註 boolean 1位元組 1*8 false、true
補充:Java有一個能夠表示任意精度的算書包,通常稱為“大數值”(big number)。雖然被稱為大數值,但它並不是一種Java型別,而是一個Java物件。
如果基本的整數和浮點數精度不能夠滿足需求,那麼可以使用java.math包中的兩個很有用的類:BigIntegerBigDecimal(Android SDK中也包含了java.math包以及這兩個類)這兩個類可以處理包含任意長度數字序列的數值。BigInteger類實現了任意精度的整數運算,BigDecimal實現了任意精度的浮點數運算。具體的用法可以參見Java API。
二、八種基本型別資料之間的轉換
在Java程式中,不同的基本型別的值經常需要進行相互轉換。
Java語言所提供的7種數值型別之間可以相互轉換,有兩種型別轉換方式:自動型別轉換和強制型別轉換。
自動型別轉換
Java所有的數值型變數可以相互轉換,如果系統支援把某種基本型別的值直接賦給另一種基本型別的變數,則這種方式被稱為自動型別轉換。
當把一個表數範圍小的數值或變數直接賦給另一個表數範圍大的變數時,系統將可以進行自動型別轉換,否則就需要強制轉換。
表數範圍小的可以向表數範圍大的進行自動型別轉換,就如同有兩瓶水,當把小瓶裡的水倒入大瓶中時不會有任何問題。
Java支援自動型別轉換的型別如下所示,左邊的數值型別可以自動型別轉換成箭頭右邊的數值型別。
1),byte->short->int->long->float->double
2),char->int->long->float->double
<span style="font-size:14px;">public static void main(String[] args) { // 下面3行程式碼int型別自動轉換成float型別 int a = 6; long b = a; System.out.println(b); }</span>
當把任何基本型別的值和字串值進行連線運算時,基本型別的值將自動型別轉換為字串型別,雖然字串型別不是基本型別,而是引用型別。
如果希望把基本型別的值轉換為對應的字串時,可以把基本型別的值和一個空字串進行連線。
<span style="font-size:14px;">public static void main(String[] args) { // 一個基本型別的值和字串進行連線運算,基本型別的值自動轉換成字串 int a = 6; System.out.println(a + ""); // 下面的語句輸出7LinkinPark System.out.println(3 + 4 + "LinkinPark"); // 下面的語句輸出LinkinPark34 System.out.println("LinkinPark" + 3 + 4); }</span>
強制型別轉換
如果希望上面自動轉換中,箭頭右邊的型別轉換成左邊的型別,則必須進行強制型別轉換。
強制型別轉換的語法格式:(targetType)value,強制型別轉換的運算子是圓括號(())。
當進行強制型別轉換時,類似於把一個大瓶子裡面的水倒入一個小瓶子,如果大瓶子裡面的水不多還好,如果大瓶子裡面的水很多,將會引起溢位,從而造成資料丟失。
這種型別也稱為縮小轉換。
注意:當試圖強制把表數範圍大的型別轉換為表示範圍小的型別時,必須格外小心,因為非常容易引起資訊丟失。
<span style="font-size:14px;">public static void main(String[] args) { // 下面3行程式碼輸出-23,典型的溢位 int intValue = 233; byte byteValue = (byte) intValue; System.out.println(byteValue); // 下面3行程式碼輸出3,典型的資訊丟失 double doubleValue = 3.14; int iValue = (int) doubleValue; System.out.println(iValue); }</span>
表示式型別的自動提升
當一個算數表示式包含多個基本型別的值時,整個算術表示式的資料型別將發生自動提升。
Java定義瞭如下的自動提升規則:
1),所有的byte型別,short型別和char型別將被提升到int型別。
2),整個算術表示式的資料型別自動提升到表示式中最高等級運算元同樣的型別。
<span style="font-size:14px;">public static void main(String[] args) { // 下面2行程式碼出錯,shortValue型別參與運算,型別自動提升到int // 將一個int型別的值賦給一個short型別的值,編譯不過 short shortValue = 5; shortValue = shortValue - 2; // 下面4行程式碼正確,3個不同型別的值參與運算,型別提升到最高的型別 // double,int,byte中,double型別最高,所以結果double型別 byte byteValue = 4; int intValue = 1; double doubleValue = 2.33; double result = byteValue + intValue + doubleValue; System.out.println(byteValue + intValue + doubleValue); // 下面程式碼的型別同樣為double System.out.println(doubleValue / intValue); }</span>