個人微信:yinhaoliang6
2. Java 數據類型
Java 中的數據類型,分爲引用類型和基本數據類型。基本類型有 8 種,引用類型將在面向對象時詳細講解,此處瞭解即可.
2.1. 八種基本數據類型 ***
整型: byte, short, int, long
浮點型: float, double
字符型: char
布爾型: boolean
2.2.整數類型 ***
整數類型有 byte, short, int, long
類型 | 佔位 | 最大值 | 最小值 |
---|---|---|---|
byte | 8 | 2^7-1 | -2^7 |
short | 16 | 2^15-1 | -2^15 |
int | 32 | 2^31-1 | -2^31 |
long | 64 | 2^63-1 | -2^63 |
- byte佔用8位,每位用0或1表示,能夠表示256(2^8)個數據。
- 這8位分爲符號位(最高位)和數值位(剩餘七位),符號位0表示正數,1表示負數
整數字面量默認是 int 類型,如果不超出聲明類型的範
圍, 則可以給小類型直接賦值(不需要強記,在編寫程序過程中會逐漸理解)。
byte b = 128; //超範圍賦值
byte b1 = 127;
byte b2 = -128;
使用整數類型(byte, short, int)要注意取值範圍, (-128~127)之間的整數字面量可以直接賦值給byte 類型,Java 會自動處理符號位.
long 類型的字面量需要使用"L",“l” 後綴,否則編譯不通過。注意如圖所示,因爲整數值的默認字面量是 int 類型,13241234856854 明顯超出了 int 的範圍,所以報編譯錯誤,但是如果在後面加了後綴"L",則表示該數是 long 類型的.
java 底層 byte,short 按照 32 位計算(注意 int 類型範圍也是 32 位)
public static void main(String[] args)
{
long a = 13241234856854; //編譯錯誤
long b = 13241234856854L;
}
2.3.浮點數類型 **
用於表示小數的數據類型.
float 類型共 32 位(與 int 相同)
int 類型的數據能表示的範圍比 float 類型小,int 類型數據表示的精度比 float 大.
float 類型因爲精度過低,所以一般很少使用,一般我們會使用 double。
對於float類型來說,它小數點後面有6-7位小數,而對於double類型來說,它小數點後面有15位小數,所以double類型比float類型精度高。又由於15是 7的兩倍多,所以float稱爲單精度浮點型, double稱之爲雙精度浮點型.
double 精度比 int 精確,但是不如 long;double 範圍大於 long。
需要注意的是,浮點數的字面量默認是 double, D d 後綴是 double, f F 是 float。
Java虛擬機規範:https://docs.oracle.com/javase/specs/jls/se8/html/jls-4.html#jls-4.2
2.4.字符類型 char **
- java中char類型佔2個字節、16位可以存放漢字,字母和數字佔一個字節,一個字節8位,中文佔2個字節,16位
- char類型賦值
char a=’a’; //任意單個字符,加單引號。
char a=’中’;//任意單箇中文字,加單引號。
char a=111;//整數。0~65535。十進制、八進制、十六進制均可。輸出字符編碼表中對應的字符
字符類型是經常用到的,比較有趣,要掌握。字符類型是一個16位無符號整數, 是一個2進制數
這個數值是一個字符的 unicode 編碼值。
unicode 編碼,是全球範圍內的編碼方法, 編制了英文, 中,日,韓,阿拉伯, 希伯來等等共 8 萬多個
字符(unicode 編碼在設計的時候就旨在能表示世界上所有文字)
Java char 的範圍 0~65535 不能表示全部 unicode,但是可以表示 unicode 只能夠最常用的部分,
足夠用的了。
Unicode 編碼中英文部分不與ASCII 碼兼容(ASCII 表示範圍 0~128), 同時英文字符和數字是連續
編碼的。
編碼是什麼?在計算機中不能寫字,只能有用 0 和 1 表示的數,那麼我們人爲做了規定,某個數除
了表示一個數,還可以表示成一個字符。一個 10 進制數 65 代表的字符就是大寫字母 A,如下所示:
public class Test
{
public static void main(String[] args)
{
char c = 65;
System.out.println(c); //A
}
}
這一切都是爲了儘可能的按人的習慣顯示和輸出,在計算機內部永遠是 0 和 1 存儲和運算的。
如下圖,20013 按字符輸出是"中",按數字輸出是 20013.
unicode對照表
http://blog.csdn.net/hherima/article/details/9045861
public static void main(String[] args)
{
char c = 20013;
System.out.print(c); //中
System.out.print((int)c);
}
注:例中的(int)c 表示將字符強制類型轉換爲數字,接下來會講。
如上例中,做個運算,如下圖,我們得到的輸出結果是 C,是因爲在 Java 中運仍然按數字運算,
但是輸出時按照它的類型(char)來輸出。
public static void main(String[] args)
{
char c = '中' + 3;
System.out.println(c); //豐
System.out.println((int)c);
}
如下案例是利用 Java 提供的產生隨機數的方法隨機生成一個數,然後將此數轉換爲 char 類型
public static void main(String[] args)
{
Random r = new Random();
int rInt = r.nextInt(58); //產生一個隨機數[0,58);
System.out.println(rInt);
char c = (char)('A' + rInt);
System.out.println(c);
}
char 類型是無符號的 16 位整數,最小值爲 0, 最大值爲 65535 = 2^16-1,在程序中爲一個字符
賦值,字符字面量使用單引號,可以爲 char 賦值的有字符、數字、符號,如下所示:
注意:特殊字符采用轉義字符表示,如:
‘\n’ 表示回車
‘\t’ 表示製表位字符
‘\’ 表示\
‘’’ 表示單引號
‘"’ 表示雙引號
'\u4e2d’表示 unicode 編碼對應的字符
當我們的控制檯顯示如下爲"?"時,代表在我本操作系統中找不到該數字對應的字庫(我們的操作系統中最多存 2 萬多的漢字,65535 本操作系統也不認識)
2.5.boolean 布爾類型 *
表達: 真(true)/假(false)。一般用於判斷語句塊中,如圖