原始數據類型

翻譯自
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_;
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,527評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,687評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,640評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,957評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,682評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,011評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,009評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,183評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,714評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,435評論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,665評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,148評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,838評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,251評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,588評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,379評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,627評論 2 380

推薦閱讀更多精彩內容