翻譯自
ORALCE 《JAVA TUTORIAL 》
Primitive Data Types
Java編程語言是靜態類型的,這意味著所有變量必須先被聲明才能使用。 這包括說明變量的類型和名稱,如您已經看到的:
int gear = 1;
這樣做會告訴你的程序,一個名為“gear”的字段存在,保存數字數據,初始值為“1”。變量的數據類型確定其可能包含的值,以及可能對其執行的操作。 除了int之外,Java編程語言還支持其他七種基本數據類型。 原始類型由語言預定義,并由保留關鍵字命名。 原始值不與其他原始值共享狀態。 Java編程語言支持的八個基本數據類型有:
byte:
字節數據類型是一個8位有符號二進制補碼整數。 它的最小值為-128,最大值為127(含)。 字節數據類型可以用于在大型陣列中節省內存,實際上內存節省很重要。 它們也可以用于代替int,其限制有助于清晰你的代碼; 變量范圍有限的事實可以作為一種文檔形式。short:
短數據類型是一個16位有符號二進制補碼整數。 最小值為-32,768,最大值為32,767(含)。 如同字節,同樣的準則適用:在節省內存確實重要的情況下,你可以用short在大型數組節省內存。int:
默認情況下,int數據類型是32位有符號二進制補碼整數,最小值為-231,最大值為231-1。 在Java SE 8及更高版本中,可以使用int數據類型來表示無符號的32位整數,其最小值為0,最大值為232-1。 使用Integer類將int數據類型用作無符號整數。 有關詳細信息,請參閱The Number Classes一節。 諸如compareUnsigned,divideUnsigned等的靜態方法已經添加到Integer類中,以支持無符號整數的算術運算。long:
長數據類型是64位二進制補碼整數。 簽名long的最小值為-263,最大值為263-1。 在Java SE 8及更高版本中,您可以使用長數據類型來表示無符號的64位長,最小值為0,最大值為264-1。 當您需要的范圍寬于int所提供的值時,請使用此數據類型。 Long類還包含compareUnsigned,divideUnsigned等方法,以支持unsigned long的算術運算。float:
float數據類型是單精度32位IEEE 754浮點數。 其范圍范圍超出了本討論范圍,但在Java語言規范的浮點類型,格式和值部分中指定。 與byte和short的建議一樣,如果需要將大量數組的浮點數保存在內存中,請使用float(而不是double)。 不應將此數據類型用于精確值,例如貨幣。 為此,你將需要使用java.math.BigDecimal類。 數字和字符串涵蓋了Java平臺提供的BigDecimal和其他有用的類。double:
雙數據類型是雙精度64位IEEE 754浮點數。 其范圍范圍超出了本討論范圍,但在Java語言規范的浮點類型,格式和值部分中指定。 對于十進制值,該數據類型通常是默認選擇。 如上所述,這種數據類型不應該用于精確的值,例如貨幣。boolean:
布爾數據類型只有兩個可能的值:true和false。 將此數據類型用于跟蹤true / false條件的簡單標志。 該數據類型表示一位信息,但其“大小”不是精確定義的。char:
char數據類型是一個16位Unicode字符。 它的最小值為'\ u0000'(或0),最大值為'\ uffff'(或65,535)。
除了上面列出的八個基本數據類型之外,Java編程語言還通過java.lang.String類為字符串提供特殊支持。 將您的字符串包含在雙引號內將自動創建一個新的String對象; 例如:
String s =“this is a string”;
字符串對象是不可變的,這意味著一旦創建,它們的值不能被更改。 String類在技術上不是原始數據類型,但是考慮到語言給予的特殊支持,你可能會傾向于認為它是這樣的。 您將在Simple Data Objects中了解有關String類的更多信息。
默認值
當聲明一個字段時,并不總是需要賦值。 聲明但未初始化的字段將被編譯器設置為合理的默認值。 一般而言,根據數據類型,默認值為零或為空。 然而,依賴于這樣的默認值,通常被認為是壞的編程風格。
以下圖表匯總了上述數據類型的默認值。
數據類型 | 默認值 |
---|---|
byte | 0 |
short | 0 |
int | 0 |
long | 0L |
float | 0.0f |
double | 0.0d |
char | '\u0000' |
String (or any object) | null |
boolean | false |
局部變量略有不同; 編譯器從不將默認值分配給未初始化的局部變量。 如果您無法初始化您聲明的本地變量,請確保在嘗試使用該變量之前為其分配一個值。 訪問未初始化的局部變量將導致編譯時錯誤。
文字(Literals)
您可能已經注意到,在初始化原始類型的變量時,不會使用new關鍵字。 原始類型是語言內置的特殊數據類型; 它們不是從類創建的對象。 字面值是固定值的源代碼表示; 文字直接在您的代碼中表示,而不需要計算。 如下所示,可以為原始類型的變量分配文字:
boolean result = true;
char capitalC = 'C';
byte b = 100;
short s = 10000;
int i = 100000;
整數文字
如果以字母L或l結尾,則整數文字的長度為long; 否則為int類型。 建議您使用大寫字母L,因為小寫字母l與數字1難以區分。
整數類型byte,short,int和long的值可以從int文字創建。 類型long的值超過int的范圍可以從長字面值創建。 整數字面值可以由這些數字系統表示:
- 十進制:基數10,其數字由數字0到9組成; 這是你每天使用的號碼系統
- 十六進制:基數16,其數字由數字0到9和字母A到F組成
- 二進制:基數2,其數字由數字0和1組成(您可以在Java SE 7及更高版本中創建二進制文字)
對于通用編程,十進制系統可能是您將要使用的唯一數字系統。 但是,如果需要使用另一個數字系統,以下示例顯示正確的語法。 前綴0x表示十六進制,0b表示二進制:
// 十進制的26
int decVal = 26;
// 十六進制的26
int hexVal = 0x1a;
// 二進制的26
int binVal = 0b11010;
浮點文字
如果以字母F或f結尾,則浮點文字的類型為float; 否則它的類型是雙倍的,它可以可選地以字母D或d結尾。
浮點類型(float和double)也可以使用E或e(用于科學記數法),F或f(32位浮點數字)和D或d(64位雙字面值)來表示;這是默認值和 約定省略)。
double d1 = 123.4;
// 與d1的值相同,但用科學符號表示
double d2 = 1.234e2;
float f1 = 123.4f;
字符和字符串文字
char和String類型的字面量可能包含任何Unicode(UTF-16)字符。 如果您的編輯器和文件系統允許,您可以直接在代碼中使用這樣的字符。 如果沒有,您可以使用“Unicode轉義”,例如“\ u0108”(大寫C帶回聲)或“S \ u00ED Se \ uFIF”(西班牙語西班牙語)。 對于字符文字,始終使用“單引號”和“雙引號”。 Unicode轉義序列可能在程序中的其他位置(例如字段名稱)中使用,而不僅僅是char或String文字。
Java編程語言還支持char和String文字的一些特殊的轉義序列:\ b(backspace),\ t(tab),\ n(換行),\ f(form feed),\ r(回車) \“(雙引號),'(單引號)和\(反斜杠)。
還有一個特殊的空文字,可以用作任何引用類型的值。 null可以分配給任何變量,除了原始類型的變量。 除了測試其存在之外,您可以使用空值很少。 因此,在程序中經常使用null作為標記來指示某些對象不可用。
最后,還有一種特殊的字面意思,稱為類文字,通過采用類型名稱并附加“.class”; 例如String.class。 這是指代表類型本身的對象(類型為Class)。
在數字文字中使用下劃線字符
在Java SE 7及更高版本中,任何數量的下劃線字符(_)都可以出現在數字文字的數字之間的任何位置。 這個功能可以讓你例如。 在數字文字中分隔數字組,這可以提高代碼的可讀性。
例如,如果您的代碼包含多個數字的數字,則可以使用下劃線字符分隔三個數字,與使用逗號或空格的標點符號作為分隔符類似。
以下示例顯示了可以在數字文字中使用下劃線的其他方法:
long creditCardNumber = 1234_5678_9012_3456L;
long socialSecurityNumber = 999_99_9999L;
float pi = 3.14_15F;
long hexBytes = 0xFF_EC_DE_5E;
long hexWords = 0xCAFE_BABE;
long maxLong = 0x7fff_ffff_ffff_ffffL;
byte nybbles = 0b0010_0101;
long bytes = 0b11010010_01101001_10010100_10010010;
您可以在數字之間放置下劃線; 您不能在以下地方放置下劃線:
- 在數字的開頭或結尾
- 與浮點文字的小數點相鄰
- 在F或L后綴之前
- 在預期有一串數位的位置
以下示例演示了數字文字中有效和無效的下劃線展示位置(突出顯示):
//無效:無法加下劃線
//與小數點相鄰
float pi1 = 3_.1415F;
//無效:無法加下劃線
//與小數點相鄰
float pi2 = 3._1415F;
//無效:無法加下劃線
//在L后綴之前
long socialSecurityNumber1 = 999_99_9999_L;
// OK(十進制文字)
int x1 = 5_2;
//無效:無法加下劃線
//在文字的末尾
int x2 = 52_;
// OK(十進制文字)
int x3 = 5_______2;
//無效:無法加下劃線
//在0x radix前綴
int x4 = 0_x52;
//無效:無法加下劃線
//在數字的開頭
int x5 = 0x_52;
// OK(十六進制文字)
int x6 = 0x5_2;
//無效:無法加下劃線
//在一個數字的末尾
int x7 = 0x52_;