JAVA-初_須知3_資料型別
==>基本資料型別
Java基本資料型別主要包括整數型別、浮點型別、字元型別和布林型別。
各基本資料型別的取值範圍、佔用的記憶體大小及預設值:
1.整數型別
整數型別用來儲存整數數值,即沒有小數部分的數值。與C、C++語言相同,整數在Java語言中有3種表示形式:十進位制、八進位制和十六進位制。
- 十進位制整數:以1~9開頭的數,如:123,−456,0。
- 八進位制整數:以0開頭且其後以0~7範圍(包括0和7)內的陣列成的整數,如:01011,−031,分別表示十進位制數521和−25。計算方式如下:
- 十六進位制整數:以0x或0X開頭且其後以0~9、a~f(包括0和9,a和f)組成,如:0x25,0Xb01e,分別表示十進位制數37和45086。計算方式如下:
注意:在十六進位制數中,0~9由數字表示,10~15分別由a、b、c、d、e、f代替。無論是十進位制數、八進位制數還是十六進位制數,計算機會先將它們轉換成二進位制數,然後再進行計算。
二進位制數是由數字0和1組成的資料流(或資料序列),在記憶體中只能存放二進位制形式的資料,例如00011101,這個二進位制資料流(或稱二進位制資料序列)共有8位(最左面的為最高位,最右面的為最低位),每一位稱做1個位元(bit),每8位稱做1個位元組(byte)。這個二進位制數表示十進位制整數29,計算方式:
在Java中存在4種類型來儲存整數:byte、short、int和long,它們的取值範圍如表2.2所示。其中int是最常使用的一種整數型別,但在大型的計算中常會生成很大的整數,超出int型別所表示的取值範圍,此時要使用long型別;byte和short型別主要用於一些特殊的情況。
可以根據這些型別定義相應的整型變數,定義方法如下:
byte a //定義變數a並指定為byte型
short b //定義變數b並指定為short型
int c //定義變數c並指定為int型
long d //定義變數d並指定為long型
在為這些整型變數賦值時,既可賦值為十進位制的整數,也可以賦值為八進位制或十六進位制的整數,但要注意變數能夠接受的最大與最小值,否則會出現錯誤。對於long型值,若賦給的值大於int型的最大值或小於int型的最小值,則需要在數字後加L或l(小寫的L),表示該數值為長整數。例如,long num=2147483649L。
對變數賦值後,通過輸出語句會自動地將變數值轉換為十進位制整數輸出。
例如:分別為位元組型變數a賦值為十進位制數123,短整型變數b賦值為八進位制數045,整型變數c賦值為十六進位制數0xb12f和長整型變數d賦值為十六制數0x160000000L,然後輸出這些變數值。
byte a=123; //定義byte型變數a, 並賦給十進位制數值123
short b=045; //定義short型變數b, 並賦給八進位制數值045
int c=0xb12f; //定義int型變數c, 並賦給十六進位制數值0xb12f
long d=0x160000000L; //定義long型變數d, 並賦給十六進位制數值0x160000000L
System.out.println(a); //輸出結果為: 123
System.out.println(b); //輸出結果為: 37
System.out.println(c); //輸出結果為: 45359
System.out.println(d); //輸出結果為: 5905580032
說明:
賦給long型變數d的十六進位制數0x160000000轉換為二進位制數後需佔用記憶體36位(由左至右,每位數字轉換成4位的二進位制數,如0x39將轉換為0011 1001),而Java中規定int型資料佔用記憶體為32位,所以十六進位制數0x160000000超出了int範圍,需要在數字後加L或l(小寫的L)表示它是一個長整數,計算機將為其分配64位記憶體空間進行儲存。
2.浮點型別
Java語言包含兩種浮點型別:單精度浮點型別和雙精度浮點型別,它們分別用float和double關鍵字來標識,計算機通過這兩種資料型別來儲存小數。
在Java中,預設情況下小數都被看做double型,佔用記憶體64位,若想使用float型小數,則需要在小數後面新增字母F或f。如1.23F,它佔用記憶體32位。
計算機計算出的小數點後的n位,與實際的數值會有一定的誤差。它只能儘量地去接近實際值,所以位數越多越精確。通常float型就足夠了,若要求更精確的計算可以使用double型,但也要節約資源。
定義浮點型變數的方法如下:
float a //定義變數a並指定為float型
double b //定義變數b並指定為double型
在為浮點型變數賦值時,既可以賦值為以十進位制表示的小數,也可以賦值為以科學記數法形式表示的數值。對於float型,必須在數值後加F或f,表示該數值為單精度浮點數。
例如:分別為單精度浮點型變數a1賦值為十進位制表示的小數12.34F,單精度浮點型變數a2賦值為科學記數法表示的數值1.234E1F,雙精度浮點型變數b1賦值為十進位制表示的小數56.78,雙精度浮點型變數b2賦值為科學記數法表示的數值567.8E-1,然後輸出這些變數值。
float a1=12.34F; //為float型變數a1賦值為十進位制表示的單精度小數(在數字後加F)
float a2=1.234E1F; //為float型變數a2賦值為科學記數法表示的單精度小數(在數字後加F)
double b1=56.78; //為double型變數b1賦值為十進位制表示的雙精度小數
double b2=567.8E-1; //為double型變數b2賦值為科學記數法表示的雙精度小數
System.out.println(a1); //輸出結果為: 12.34
System.out.println(a2); //輸出結果為: 12.34
System.out.println(b1); //輸出結果為: 56.78
System.out.println(b2); //輸出結果為: 56.78
3.字元型別
Java語言中的字元型別用來儲存單個字元,它佔用16位(兩個位元組)的記憶體空間,使用關鍵字char進行標識。
因為計算機只能儲存二進位制資料,所以需要將字元通過一串二進位制資料來表示,也就是通常所說的字元編碼。Java對字符采用Unicode字元編碼,Unicode使用兩個位元組表示1個字元,並且Unicode字符集中的前128個字元與ASCII字符集相容。
如字元’a’的ASCII編碼的二進位制資料形式為01100001,Unicode字元編碼的二進位制資料形式為00000000 01100001,它們都表示十進位制數97。因此與C、C++語言一樣,Java同樣把字元作為整數對待。
說明:
ASCII是用來表示英文字元的一種編碼,每個字元佔用一個位元組,所以最多可表示256個字元。但英文字元並沒有那麼多,ASCII使用前128個(位元組中最高位為0)字元來存放包括控制符、數字、大小寫英文字母和其他一些符號的字元。而位元組的最高位為1的另外128個字元稱為“擴充套件ASCII”,通常存放英文的製表符、部分音標字元等其他一些符號。使用ASCII編碼無法表示中文等其他一些國家的語言文字。
Unicode編碼採用無符號編碼,可以儲存65536個字元(0x0000~0xffff),所以Java中的字元幾乎可以處理所有國家的語言文字。
Java中的字元通過Unicode編碼以二進位制的資料形式儲存到計算機中,計算機可以通過資料型別判斷要輸出的是一個字元還是一個整數。
定義字元型別的變數,可以通過關鍵字char來定義。定義方法如下:
char c1 //定義字元型變數c1
char c2 //定義字元型變數c2
賦給char型變數的字元常量值必須用英文狀態下的一對單引號括起來,由於Java的字符采用Unicode編碼,一箇中文字與一個英文字母在Java中同樣都是用一個字元來表示。
例如分別為字元型變數a賦值為’m’、字元變數b賦值為’明’、字元變數c賦值為’9’和字元變數d賦值為’@’,然後輸出。
char a='m'; //為字元型變數ch1賦值字元常量'm'
char b='明'; //為字元型變數ch1賦值字元常量'明'
char c='9'; //為字元型變數ch1賦值字元常量'9'
char d='@'; //為字元型變數ch1賦值字元常量'@'
System.out.println(a); //輸出結果為: m
System.out.println(b); //輸出結果為: 明
System.out.println(c); //輸出結果為: 9
System.out.println(d); //輸出結果為: @
也可以為字元變數賦值為0~65535範圍內的整數,這些整數可使用十進位制、八進位制或十六進位制來表示。根據變數型別,計算機會自動將這些整數轉換為所對應的字元輸出。
例如分別為字元變數ch1賦值為十進位制數97、字元變數ch2賦值為八進位制數0142、字元變數ch3賦值為十六進位制數0x63,然後輸出。
char ch1=97; //為字元型變數ch1賦值十進位制數97
char ch2=0142; //為字元型變數ch2賦值八進位制數0142
char ch3=0x63; //為字元型變數ch2賦值十六進位制數0x63
System.out.println(ch1); //輸出結果為: a
System.out.println(ch2); //輸出結果為: b
System.out.println(ch3); //輸出結果為: c
與C、C++語言一樣,Java語言提供了轉義字元來表示一些特殊的字元。轉義字元以反斜槓開頭,Java中提供的轉義字元:
將轉義字元賦值給字元變數時,與字元常量值一樣需要使用單引號將轉義字元括起來,例如:分別為字元變數c1賦值為’\’、字元變數c2賦值為’’’、字元變數c3賦值為’\115’、字元變數c4賦值為’\u0052’,字元變數c5賦值為’\u2605’,然後輸出。
char c1='\\'; //為變數c1賦值轉義字元“\\”
char c2='\''; //為變數c2賦值轉義字元“\'”
char c3='\115'; //為變數c3賦值轉義字元“\115”表示的字元
char c4='\u0052'; //為變數c4賦值轉義字元“\u0052”表示的字元
char c5='\u2605'; //為變數c5賦值轉義字元“\u2605”表示的字元
System.out.println(c1); //輸出結果為: \
System.out.println(c2); //輸出結果為: '
System.out.println(c3); //輸出結果為: M
System.out.println(c4); //輸出結果為: R
System.out.println(c5); //輸出結果為: ★
在Java中,對字元變數進行如下的賦值也是合法的:
char char1='B'+1; //將字元常量值'B'與十進位制整數1相加的結果賦給字元變數char1
char char2='B'+'1'; //將兩個字元常量值'B'與'1'相加的結果賦給字元變數char2
char char3=24+76; //將兩個十進位制整數24與76相加的結果賦給字元變數char3
char char4='n'-32; //該操作將得到大寫的字母N,'N'+32將得到小寫的字母n
System.out.println(char1); //輸出結果為: C
System.out.println(char2); //輸出結果為: s
System.out.println(char3); //輸出結果為: d
System.out.println(char4); //輸出結果為: N
4.布林型別
布林型資料只有兩個值:true和false,分別代表布林邏輯中的“真”和“假”,且布林值不能與整數進行轉換,通常布林型資料在流程控制中作為判斷條件。
定義布林型變數,可以通過關鍵字boolean來定義。定義方法如下:
boolean b1; //定義boolean型變數b1
boolean b2; //定義boolean型變數b2
布林型資料只存在true和false數值,所以在為boolean型變數賦值時,除這兩個值外的任何數值都是非法的。
例如,分別為布林型變數married賦值為false,alive賦值為true,然後輸出。
boolean married=false;
boolean alive=true;
System.out.println("已婚:"+married); //輸出結果為: false
System.out.println("生命:"+alive); //輸出結果為: true