1. 基本類型列表
Java 有 8 種基本原始類型。它們之所以被稱為原始類型,是因為這些類型的值不是對象,而是直接存儲在變量中。
下表包含有關這些類型的一些簡要信息:
類型 | 字節 大小 |
取值範圍 | 默認值 | 描述 |
---|---|---|---|---|
byte |
1個 | -128 .. 127 | 0 |
最小的整數類型是單字節 |
short |
2個 | -32,768 .. 32.767 | 0 |
短整數,兩個字節 |
int |
4個 | -2*10 9 .. 2*10 9 | 0 |
整數,4 字節 |
long |
8個 | -9*10 18 .. 9*10 18 | 0L |
長整型,8 字節 |
float |
4個 | -10 38 .. 10 38 | 0.0f |
浮點數,4字節 |
double |
8個 | -10 308 .. 10 308 | 0.0d |
雙精度浮點數,8字節 |
boolean |
1個 | true ,false |
false |
布爾類型(只有true and false ) |
char |
2個 | 0 .. 65.535 | '\u0000' |
字符,2個字節,全部大於0 |
順便說一句,這裡有一個重要的細微差別。如果您聲明了一個實例變量(字段)或一個靜態類變量並且沒有立即為其分配任何值,那麼它會被初始化為一個默認值。該表列出了這些值。
方法中的局部變量沒有默認值。如果您不為此類變量賦值,則它們將被視為未初始化且無法使用。
但是讓我們回到原始類型並仔細研究它們。
2. 整數類型
Java 有 4 種整數類型:byte
、short
和int
。long
它們的大小和可以存儲的值的範圍不同。
int
類型
最常用的是int
類型。該名稱來自單詞int eger(整數)。代碼中的所有整數文字(整數)都是(如果它們不以、或ints
結尾)。L
F
D
這種類型的變量可以取值從-2,147,483,648
到+2,147,483,647
。
這已經足夠了,幾乎適用於所有場合。幾乎每個返回數字的函數都會返回一個int
.
例子:
代碼 | 解釋 |
---|---|
|
該length() 方法返回字符串的長度 |
|
該length 字段包含數組的長度。 |
short
類型
該short
類型的名稱來自short int
. 它通常也稱為短整數。與類型不同int
,它的長度只有兩個字節,可能值的範圍是從-32,768
到+32,767
。
這意味著您不能在其中存儲數字一百萬。甚至50,000。這是 Java 中最不常用的整數類型。使用它的主要動機是節省內存。
假設您事先知道您將使用永遠不會超過 30,000 的值,並且這些值將有數百萬個。
例如,假設您正在編寫一個處理超高清圖片的應用程序,10
每個顏色使用 - 位。你的照片有一百萬像素。int
這是決定使用或事項的場景short
。
long
類型
這種類型得名於long int
,也稱為長整型。與類型不同int
,它的取值範圍非常大:從到。-9*1018
+9*1018
為什麼它不是基本整數類型?
因為 Java 出現在 90 年代中期,當時大多數計算機都是 32 位的。這意味著所有處理器都針對處理由 32 位組成的數字進行了優化。處理器可以處理 64 位整數,但對它們的操作速度較慢。
因此,程序員合理地決定製作int
標準整數類型,並long
僅在真正需要時才使用該類型。
byte
類型
這是 Java 中最小的整數類型,但遠非最少使用。它的名稱byte
也是 Java 中最小可尋址內存塊的代名詞。
byte
type: from -128
to的有效值不多+127
。但這不是它的強項。byte
當您需要在內存中存儲大型 blob 數據時,最常使用該類型。s數組byte
非常適合此目的。
假設您需要在某處複製一個文件。
您不需要處理文件的內容:您只想創建一個內存區域(緩衝區),將文件的內容複製到其中,然後將該數據從緩衝區寫入另一個文件。byte
為此,您需要一個數組。
請記住,數組變量僅存儲對內存區域的引用。當變量傳遞給某個方法時,只傳遞內存地址。內存塊本身不會被複製。
byte[] buffer = new byte[1024*1024];
FileInputStream sourceFile = new FileInputStream("c:\\data.txt");
FileOutputStream destFile = new FileOutputStream("c:\\output.txt");
while (true)
{
int size = sourceFile.read(buffer); // Read data from a file into a buffer
destFile.write(buffer, 0, size); // Write data from the buffer to a file
// Stop copying if the buffer is not full
if (size < buffer.length) break;
}
sourceFile.close();
destFile.close();
3.真實類型
基本類型包括兩種實數類型。儘管使用該術語並不完全準確。當計算機處理實數時,我們稱它們為浮點數。該名稱來自表示數字的標準,其中數字的整數和小數部分由句點(點,而不是逗號)分隔。
每個國家都有自己的數字書寫標準(驚喜!)。
很多人習慣用句點分隔千位,用逗號作為小數點分隔符:例如,他們會one million ones and 153 thousandths
寫成1.000.000,153
. 但是在 Java 的創造者居住的美國,採用了不同的標準:1000000.153
Java 有兩種浮點基本類型:double
和float
.
正如我們前面所說,這些類型有一個非常特定的內部安排:實際上,這些類型的每個變量內部不是一個數字,而是兩個:
例如,浮點數987654.321
可以表示為。然後在內存中它將被表示為兩個數字(尾數,即數字的有效部分)和(指數,即十的冪)0.987654321*106
987654321
6
float
類型
類型的名稱float
來自float ing-point number。這種類型的大小非常小——只有 4 個字節(32 位)——但它可以存儲從到 的值。分配 24 位用於表示尾數,8 位用於表示指數。這種類型只能存儲 8 位有效數字。-3.4*1038
3.4*1038
這種方法可以存儲比 大得多的數字int
,同時使用相同的 4 個字節。但為此,我們犧牲了準確性。由於部分內存存儲尾數,這些變量只存儲6-7位小數,其餘的被丟棄。
例子:
代碼 | 價值 |
---|---|
|
123.45679 |
|
12346.0 |
|
-1.2345679 |
如您所見,這種類型的主要缺點是有效數字的數量非常少,並且一到第八位就會失去精度。這就是為什麼該float
類型在 Java 程序員中不是很流行的原因。
double
類型
類型double
是標準的浮點類型。名字來源於雙精度浮點數。默認情況下,所有真實文字都是double
s 。
該類型占用 8 個字節的內存(64 位),可以存儲從到 的值。需要知道的重要一點是,尾數分配了 53 位,而其餘 11 位分配給指數。-1.7*10308
1.7*10308
這允許存儲 15-17 位有效數字。
例子:
代碼 | 價值 |
---|---|
|
1234567890.1234567 |
|
1234567890.1234512 |
|
1234567890.1357913 |
這種精度,尤其是與類型相比float
,是決定性的:99% 的實數運算都是使用double
類型執行的。
11
位分配給指數,這意味著您可以存儲十的冪從到-323
(+308
這是二的冪從-1024
到+1023
)。該double
類型可以輕鬆存儲小數點後有數百個零的數字:
代碼 | 價值 |
---|---|
|
600.0 |
4.無限
浮點數還有另一個有趣的特性:它們可以存儲一個表示無窮大的特殊值。你可以表示正無窮大和負無窮大。
例子:
代碼 | 筆記 |
---|---|
|
|
|
|
|
|
如果無窮大乘以一個數,就會得到無窮大。如果你給無窮大加上一個數,你就會得到無窮大。那是超級方便。
不是數字 ( NaN
)
任何涉及無窮大的運算都會產生無窮大。好吧,大多數但不是全部。
浮點數可以存儲另一個特殊值:NaN
. 它是N ot a N umber(不是數字)的縮寫。
在數學中,如果用無窮大除以無窮大,結果是不確定的。
但是,在 Java 中,如果用無窮大除以無窮大,結果是NaN
.
例子:
代碼 | 筆記 |
---|---|
|
|
|
|
|
|
任何具有NaN
yields的操作NaN
。
5.char
類型
在Java的原始類型中,有一個值得特別注意:類型char
。它的名字來自單詞char acter,類型本身用於存儲字符。
字符是由字符串組成的,對嗎?字符串是字符數組。
但更有趣的是,該char
類型也是數字類型!可以這麼說,這是一種雙重用途的類型。
實際情況是char
類型實際上不是字符。相反,它存儲來自 Unicode 編碼的字符代碼。每個字符對應一個數字:字符的數字代碼。
每個char
變量在內存中佔用兩個字節(與類型相同short
)。但與short
類型不同的是,char
整數類型是無符號的,可以存儲從0
到 的值65,535
。
該char
類型是混合類型。它的值既可以解釋為數字(例如,它們可以相加和相乘)也可以解釋為字符。這樣做是因為儘管字符是視覺表示,但對於計算機而言,它們首先只是數字。將它們作為數字使用會更方便。
統一碼
Unicode是一個包含世界上所有字符的特殊表(編碼)。每個角色都有自己的編號。它看起來大約是這樣的:
有多種方法可以為變量賦值char
。
代碼 | 描述 |
---|---|
|
該a 變量將包含拉丁字母A 。 |
|
該a 變量將包含拉丁字母A 。它的代碼是65 。 |
|
該a 變量將包含拉丁字母A 。它的代碼是 65 ,41 在十六進制中是相等的。 |
|
該a 變量將包含拉丁字母A 。它的代碼是 65 ,41 在十六進制中是相等的。兩個額外的零不會改變任何東西。 |
|
該a 變量將包含拉丁字母A 。另一種通過代碼定義字符的方法。 |
大多數情況下,人們只是簡單地在引號中指明字符(如表的第一行)。也就是說,後一種方法也很受歡迎。它的優點是可以在字符串中使用。
正如我們所說,該char
類型也是一個整數類型,所以你可以這樣寫:
代碼 | 控制台輸出 |
---|---|
|
拉丁字母B 將顯示在屏幕上。因為: A ———— 65 B _66 C 67 |
char
與小號一起工作
每個char
首先是一個數字(字符代碼),然後是一個字符。如果你知道一個字符代碼,你總是可以在你的程序中得到這個字符。例子:
代碼 | 控制台輸出 |
---|---|
|
|
標準代碼
以下是最著名的字符代碼:
人物 | 代碼 |
---|---|
0 , 1 , 2 , ...9 |
48 , 49 , 50 , ...57 |
a , b , c , ...z |
97 , 98 , 99 , ...122 |
A , B , C , ...Z |
65 , 66 , 67 , ...90 |
6.boolean
類型
最後一個原始類型是boolean
.
如您所知,它只能取兩個值:true
和false
。
這樣,您就已經了解了有關此類型的所有信息。
GO TO FULL VERSION