黑馬程序員----【javaSE基礎】入門基礎--數據類型及轉換

------- android培訓java培訓、期待與您交流! ----------


在Java語言中,Java是不支持C語言還有C++語言中的指針、結構體類型以及共用類型的。

    在Java語言中,簡單(或基本)數據類型分了以下八種:

    字節型(byte)、短整型(short)、整型(int)、長整型(long)、字符型(char)、浮點型

(float)、雙精度型(double)、布爾型(boolean)

    在這些當中,又可以分爲四組:

    1、整數:該組包括字節型(byte)、短整型(short)、整型(int)、長整型(long)、它們有符

號整數。

    2、浮點型數:該組包括浮點型(float)、雙精度型(double)、它們代表有小數精度要求的數字。

    3、字符:這個組包括字符型(char),它代表字符集的符號,例如字母和數字。

    4、布爾型:這個組包括布爾型(boolean),它是一種特殊的類型,表示真(true)/假(false)值

    各個數據類型在內存中所佔用的內存如下表,因爲Java語言具有可移植性,所在在內存的佔用上面,

各種機型都是一樣的:

序號  簡單類型  大小/位數  範圍/精度

 1   float   4 字節/32位  32位IEEE 754單精度 
 2   double   8 字節/64位  64位IEEE 754雙精度 
 3   byte    1字節/8位  -128到127 
 4   short   2 字節/16位  -32,768到32,767 
 5   int    4 字節/32位  -2,147,483,648到2,147,483,647 
 6   long    8 字節/64位  -9,223,372,036,854,775,808到9,223,372,036, 854,775,807 
 7   char    2 字節/16位  整個Unicode字符集 
 8   boolean    1 位    True或者false



整型數據

    一、整型常量

    和C/C++相比,Java的整型常量具有以下三種形式:

    1、十進制整數:如:123、-456、0……等等

    2、八進制整數:以“0”開頭的,如:0123表示十進制數83,-011表示十進制數-9……等等

    3、十六進制整數:以“0x”或“0X”開頭,如:0x123表示十進制數291,-0X12表示十進制數-18。

    對於 int 型的整型常量在機器中佔32位,而對於long型的常量在機器中要佔用64位,並且在表示

long型的時候,要在後面加上“l”或“L”符號來表示,如:123l、456L……等等。

   二、整型變量

    整型變量的類型有四種,分別是:byte、short、int、long。

    對於以上四種類型,int類型是最常使用的。但對於大型計算,常會遇到很大的整數,超出int類型所

表示的範圍,這時,就要使用long型。

    由於不同的機器對於多字節數據的存儲方式不同,可能是從低字節向高字節存儲,也可能是從高字節

向低字節存儲,這樣,在分析網絡協議或文件格式時,爲了解決不同機器上的字節存儲順序的問題,就用

byte類型來表示數據是合適的。而通常情況下,由於其表示的數據範圍很小,容易造成溢出,應避免使用

    short類型則很少使用,它限制數據的存儲爲先高字節,後低字節,這樣在某些機器中會出錯 。


實型(浮點型)數據

   一、實型常量

    與C/C++相同,Java的實常數有兩種表達形式:

    1、十進制數形式。有數字和小數點組成,並且必須有小數點,如:0.123、.123、123.、123.0……

等等都可以。

    2、科學記數法形式。如:123e4或者123E4,其中,“e”或者“E”前面必須有數,並且後面的指數

必須是整數。

    實常數在機器中佔64位,具有double型的值。對於float型的值,則要在數字後面加上“f”或者“F

”,如:12.3f或45.6F,它在機器中佔32位,表示的精度較底。


  字符型數據

    一、字符型常量

    字符型常量是用單引號('')括起來的一個字符,如:'a'、'B'……等等。另外,Java也提供一些轉

義字符,以反斜槓“/”開頭,各種轉義字符的意思如下:

  /ddd 1到3位8進制數據所表示的字符(ddd)

  /uxxxx 1到4位16進制數所表示的字符(xxxx)

  /'   單引號字符        //   反斜槓字符

  /r   回車           /n   換行

  /f   走紙換頁         /t   橫向跳格

  /b   退格

    但還是要注意:與C/C++不同,Java中的字符型數據是16位無符號型數據,它表示Unicode集,而不僅

僅是ASCII集,例如:/u0061表示ISO拉丁碼的‘a’。

    二、字符型變量

    和C/C++不一樣,Java中的字符型數據不能作爲整數來用,因爲Java不提供無符號整數類型。但是,

同樣可以當作整數來操作,如下例子:

    int  three = 3 ;
    char one = '1' ;
    char four = ( char ) ( three + one ) ;

    在上例中,在計算加法時,字符型變量one被轉化成整數進行相加,最後把結果又轉化成字符型。

   三、字符串常量

    與C/C++不同,Java的字符串常量是作爲String類的一個對象來處理的,而不是一個數據。

    與C/C++相同,Java的字符串常量也是用“""”括起來的一組字符。


布爾型數據

    布爾型數據只有兩個值,true(真)和false(假),且它們不對應於任何整值。在流控制中常用到

它。

    現在,請看下面的這個例子,用到了前面講的全部數據類型,並且通過顯示器顯示它們:

public class SimpleTypes
{
      public static void main( String args[] )
      {
            byte b=0x55;
            short s=0x55ff;
            int i=1000000;
            long l=0xfffL;
            char c='c';
            float f=0.23F;
            double d=0.7E-3;
            boolean bool=true;
            System.out.println("b = "+b);
            System.out.println("s = "+s);
            System.out.println("i = "+i);
            System.out.println("l = "+l);
            System.out.println("c = "+c);
            System.out.println("f = "+f);
            System.out.println("d = "+d);
            System.out.println("bool = "+bool);
      }
}

編譯並運行該程序,輸出結果爲:

C:/>java SimpleTypes

b = 85

s = 22015

i = 1000000

l = 4095

c = c

f = 0.23

d = 0.0007

bool = true


 各類數值型數據之間的混合運算

   一、自動類型轉換

    在整型、實型、字符型數據之間,不同類型之間可以混合運算,但是必須先轉換成同一類型,然後進

行運算,其轉換的規則是:

① ( byte 或 short ) op int → int

② ( byte 或 short 或 int ) op long → long

③ ( byte 或 short 或 int 或 long ) op float → float

④ ( byte 或 short 或 int 或 long 或 float) op double → double

⑤ char op int → int

    箭頭左邊表示參與運算的數據類型,op爲運算符(如加、減、乘、除等),右邊表示轉換成進行運算

的數據類型。

    二、強制類型轉換

    高級數據要轉換成低級數據,需用到強制類型轉換,如:

    int i;

    byte b=(byte)i; //把int型變量“i”強制轉換爲byte型

    這種使用可能會導致溢出或精度的下降,最好不要使用。


 補充內容

   Java的簡單數據類型

    Java中的所有數字變量都是有符號的,Java不允許數據類型之間隨意的轉換。只有數字變量之間可以

進行類型轉換。比如,boolean就不能轉換爲其他數據類型,而且其他數據類型也不能轉換爲boolean。

    因爲Java的簡單數據類型都經過準確定義,而且直接內存訪問也是不允許的,所以在Java語言中取消

了sizeof運算符。

    Java的簡單數據類型並不是對象。爲了採用面向對象方式對待Java簡單數據類型,你需要首先用類封

裝它們。

   封裝類

    Java還提供了Byte、Short、Boolean、Character、Integer、Double、Float和Long等內置的封裝類

。這些封裝(wrapper)類提供了很直觀的實用方法。比如:Byte、Float, Integer、Long和Double類都

具有doubleValue()方法,通過它可以把存儲在類的實例中的值轉換爲Double類型。還有,所有的封裝類

都提供了靜態的valueOf(String s)方法把給定的String轉換爲對應的簡單類型。清單A的代碼演示了這些

封裝類的一些用法。

    簡單數據類型初始化

    在Java語言中,簡單數據類型作爲類的成員變量聲明時自動初始化爲默認值,除非顯式地聲明。簡單

數據類型爲某一方法聲明局部變量時不會自動地初始化而且會導致編譯器扔出類似以下的錯誤消息

“Variable x may not have been initialized.(x變量沒有初始化)”表B定義了Java簡單數據類型的

默認值。

   Java簡單數據類型的默認值 
    類型   默認值 
  boolean  false 
  Byte    0 
  short    0 
  int     0 
  Long    0 
  Char   '/u0000'
  Float   0.0 
  double   0.0 
  
    Java簡單數據類型的默認初始值

  上面的代碼顯示所有的Java簡單數據類型都用做了Initialization類的成員變量。該例還顯示

Initialization類的構造器中局部聲明瞭一個int變量。在不修改以上代碼的情況下,編譯器會在對以上

代碼進行編譯的時候扔出錯誤。

    一旦引發問題的代碼行(那些引用未初始化變量導致錯誤發生的代碼)被刪除或者註釋掉。程序成功

編譯和執行之後就會顯示以下的結果:

  byte: 0 
  short: 0 
  int: 0 
  long: 0 
  float: 0.0 
  double: 0.0 
  char: 0 
  boolean: false

    我們還可以顯式地初始化成員變量爲其他值,如以下代碼所示:

  byte b = 5; 
  short s = 123; 
  int i = 1234; 
  long l = 12345; 
  float f = 123.45f; 
  double d = 12345.678; 
  char c = 'A'; 
  boolean z = true;


------- android培訓java培訓、期待與您交流! ----------

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章