Java備忘錄《資料型別》

Ansong發表於2018-08-30

基本資料型別

Java中基本的資料型別分為4大類,共8中資料型別

  • 整數型別:byte、short、int、long
  • 浮點型別:float、double
  • 字元型別:char
  • 布林型別:boolean

整數,浮點,字元型別都屬於數值型別,可以互相轉換

Java備忘錄《資料型別》

1、整型型別

java中四種整型型別之間的區別僅僅只是寬度和範圍上的不同。Java中的資料型別是跨平臺的(與執行在那種平臺無關),無論計算機是32位還是64位的,byte型別整數都是佔一個位元組(8位)。

Java備忘錄《資料型別》

Java中整型型別預設是int型別。 long型別需要在數值後邊加上大寫或者小寫的英文字母L(推薦使用大寫,防止小寫與數字1混淆)

2、浮點型別

浮點型別主要用於儲存小數數值,也可以用來存放數值較大的整數,分為浮點數(float)和雙精度浮點數(double)兩種,雙精度浮點數所使用的記憶體空間比浮點數多,可表示的數值範圍和精度也比浮點數大。

Java備忘錄《資料型別》

Java中浮點型別預設是double型別,例如0.0表示的是double常量,而不是float型別,要想表示float型別,需要在數值後邊加上F或者f。double型別資料後邊也可以加上D或者d來表示double浮點數

3、數字表示方式

如果為一個整數變數賦值,使用二進位制數、八進位制數和十六進位制數表示,它們的表示方式分別如下:

二進位制數:以 0b 或0B為字首,注意0是阿拉伯數字,不要誤認為是英文字母o。

八進位制數:以0為字首,注意0是阿拉伯數字。

十六進位制數:以 0x 或0X為字首,注意0是阿拉伯數字。

例如下面幾條語句都是表示int整數28。

int decimalInt = 28;
int binaryInt1 = 0b11100;
int binaryInt2 = 0B11100;
int octalInt = 034;
int hexadecimalInt1 = 0x1C;
int hexadecimalInt2 = 0X1C;
複製程式碼

4、字元型別 Java中char宣告字元型別,表示單個字元,在使用時字元需要使用單引號括起來。

char c = 'A';
複製程式碼

Java字元采用雙位元組Unicode編碼,佔兩個位元組(16位),因而可用十六進位制(無符號的)編碼形式表示,它們的表現形式是\un,其中n為16位十六進位制數,所以'A'字元也可以用Unicode編碼'\u0041'表示

    char c1 = 'A';          A
    char c2 = '\u0041';     A
    char c3 = '花';         花
複製程式碼

字元型別也屬於是數值型別,可以與int等數值型別進行數學計算或進行轉換。這是因為字元型別在計算機中儲存的是Unicode編碼,雙位元組Unicode的儲存範圍在\u0000~\uFFFF,所以char型別取值範圍0~216-1。

為了表示一些特殊字元,前面要加上反斜槓(\),這稱為字元轉義。

Java備忘錄《資料型別》

5、布林型別

Java中宣告布林型別的關鍵字是boolean,只用兩個值true/false。

在C語言中布林型別是數值型別,它有兩個取值:1和0。而在Java中的布林型別取值不能用1和0替代,也不屬於數值型別,不能與int等數值型別之間進行數學計算或型別轉化。

6、數值型別相互轉換

基本資料型別中數值型別之間可以互相轉換,布林型別不能與它們之間進行轉換。但有些不相容型別之間,如String(字串)轉換為int整數等,可以藉助於一些類的方法實現。

自動轉換型別:小範圍資料型別可以自動轉換為大範圍資料型別

Java備忘錄《資料型別》
char型別比較特殊,char自動轉換為int、long、float和double,但byte和short不能自動轉換為char,而且char也不能自動轉換為byte或short。

自動型別轉換不僅發生在賦值過程中,在進行數學計算時也會發生自動型別轉換,在運算中往往是先將資料型別轉換為同一型別,然後再進行計算

Java備忘錄《資料型別》
強制型別轉換:強制型別轉換是在變數或常量之前加上“(目標型別)”實現,強制型別轉換主要用於大寬度型別轉換為小寬度型別情況。

//int型變數
int i = 10;
float c1 = i / 3;                  3.0
//把int變數i強制轉換為float
float c2 = (float)i / 3;           3.333333
複製程式碼

在進行強制轉換時,需要注意計算過程中精度丟失問題,最好是現將需要計算的數值轉換成目標精度再進行計算

long yourNumber = 6666666666L;      6666666666
int myNuber = (int)yourNumber;      -1923267926
複製程式碼

經過強制型別轉換後,原本的6666666666L變成了負數。當大寬度數值轉換為小寬度數值時,大寬度數值的高位被截掉,這樣就會導致資料精度丟失。除非大寬度數值的高位沒有資料,就是這個數比較小的情況,例如將6666666666L換為6L就不會丟失精度。

7、引用資料型別

在Java中除了8種基本資料型別外,其他資料型別全部都是引用(reference)資料型別,引用資料型別用了表示複雜資料型別,包含:類、介面和陣列宣告的資料型別。

Java備忘錄《資料型別》
Java中的引用型別,相當於C等語言中指標(pointer)型別,引用事實上就是指標,是指向一個物件的記憶體地址。引用型別變數中保持的是指向物件的記憶體地址。很多資料上提到Java不支援指標,事實上是不支援指標計算,而指標型別還是保留了下來,只是在Java中稱為引用型別。

int x = 7;                         ①
int y = x;                         ②

String str1 = "Hello";             ③
String str2 = str1;                ④
str2 = "World";                    ⑤
複製程式碼

上段程式碼中,兩個基本資料型別,兩個引用資料型別,1、2程式碼將7賦值給x,將x賦值給y,此時兩個變數值都為7,並互不影響。

當程式執行完第③行時,字串“Hello”物件被建立,保持到記憶體地址0x12345678中,str1是引用型別變數,它儲存的是記憶體地址0x12345678,這個地址指向“Hello”物件。

當程式執行完第④行時,str1變數內容(0x12345678)被賦值給str2是引用型別變數,這樣一來str1和str2儲存了相同的記憶體地址,都指向“Hello”物件。見圖5-4所示,此時str1和str2本質上是引用一個物件,通過任何一個引用都可以修改物件本身。

Java備忘錄《資料型別》
當程式執行完第⑤行時,字串“World”物件被建立,保持到記憶體地址0x23455678中,地址儲存到str2變數中,此時,str1和str2不再指向相同記憶體地址

Java備忘錄《資料型別》

相關文章