原始數據類型

原始數據類型

翻譯自
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表示二進制:

// The number 26, in decimal
int decVal = 26;
//  The number 26, in hexadecimal
int hexVal = 0x1a;
// The number 26, in binary
int binVal = 0b11010;

浮點文字

如果以字母F或f結尾,則浮點文字的類型爲float; 否則它的類型是雙倍的,它可以可選地以字母D或d結尾。

浮點類型(float和double)也可以使用E或e(用於科學記數法),F或f(32位浮點數字)和D或d(64位雙字面值)來表示;這是默認值和 約定省略)。

double d1 = 123.4;
// same value as d1, but in scientific notation
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_;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章