java 原生類型(翻譯自Java Tutorials)

來源:互聯網
上載者:User

原文出自 http://www.cnblogs.com/ggjucheng/archive/2012/12/08/2809371.html

英文出自 http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

java程式設計語言是靜態類型,這表示變數使用前必須聲明。這涉及闡明該變數的類型和名稱,如你已經看到了:

int gear = 1;

上面告訴你的程式,存在一個欄位名為”gear”,儲存數位資料,初始值為“1”。變數的資料類型,決定它可以包含的值,還有它可以做的操作。對於int更多的是,java程式設計語言支援其他原生資料類型。原生類型是程式設計語言預定義的,而且類型名字也是保留字。原生類型的值,不會和其他原生類型的值共用狀態。java程式設計語言支援八種原生類型:

byte:byte的資料類型是一個8位有符號的二進位補碼整數。最小值是128,最大值是127(包括)。當節省記憶體很重要,byte資料類型在大數組中節省記憶體很有用。如果變數的值的限制有利于澄清代碼,也可以用byte替代int;事實上,變數的範圍限制,可以作為文檔形式。

short:short資料類型是16位的有符號的補碼整數。最小值是-32,768 ,最大值是32,767 (包括)。和byte相比,也有一樣準則:當節省記憶體很重要,short資料類型在大數組中節省記憶體很有用。

int:int資料類型是32位的有符號的補碼整數。最小值是-2,147,483,648 ,最大值是2,147,483,647 (包括)。對於完整的值,這個資料類型通常是預設選擇,除非有其他原因(例如上述原因)。這個資料類型大多數情況下,足夠你的程式使用整數。如果你需要一個更大範圍的值,可以使用long。

long:long資料類型是64位的有符號的補碼整數。最小值是-9,223,372,036,854,775,808 ,最大值是9,223,372,036,854,775,807 (包括)。當需要的值範圍超過了int,就可以使用這個資料類型。

float:float 資料類型是單精確度 32 位 IEEE 754 浮點數。它的值的範圍超出了本討論,但是可以參考java語言規範的浮點類型。和byte,short的建議一樣,當你使用大量浮點數數組,需要節省記憶體,使用float。此資料類型永遠不應該用於精確的值,如貨幣。為此,您將需要使用 java.math.BigDecimal 類來代替。Java 平台提供數字和字串包括 BigDecimal 和的其他有用的類。

double:double資料類型是單精確度 64 位元 IEEE 754 浮點數。它的值的範圍超出了本討論,但是可以參考java語言規範的浮點類型。對於小數值,這個資料類型是預設選擇。如上面的建議,此資料類型永遠不應該用於精確的值。

boolean:boolean資料類型只有兩個可能值:true和false.使用此資料作為簡單標記來跟蹤真/假條件。這種資料類型代表一個位元的資訊,但它的“大小”沒有明確界定。

char:char資料類型是單個16 位Unicode 字元。它的最小值是'\u0000' (或0),最大值是'\uffff'(或65,535 包括).

除了上面列出的8個原生資料類型,java程式設計語言通過類java.lang.String提供字串的特殊支援。使用兩個雙引號包圍字串,會自動建立String對象;例如,String s = "this is a string";String對象是不可變的,這表示它一旦被建立,它的值就不可變。類String從技術上講,它不是一個原生類型,但是可以認為,它是java語言特殊支援的,你可能會傾向於認為它是原生類型。

 

預設值

當欄位聲明,未必一定要賦值。欄位聲明了,但是沒有初始化,編譯器將會設定一個合理的預設值。一般來說,預設值是0或者null,取決於資料類型。但是,依靠這種預設值,一般認為是糟糕的編程風格。

下面的表徵圖總結上面涉及的資料類型的預設值。

 

Data Type Default Value (for fields)
byte 0
short 0
int 0
long 0L
float 0.0f
double 0.0d
char '\u0000'
String (or any object)   null
boolean false

 

局部變數略有不同,編譯器不會給一個沒有初始化的局部變數賦預設值。如果你沒有在局部變數聲明時,初始設定變數,那麼,你必須在使用它之前給它賦值。訪問一個沒有初始化的局部變數,編譯器會報錯。

 

常量

你可能注意到初始化原生類型的變數,不用使用new關鍵字。原生類型是java語言內建的特殊資料類型,不是類建立的對象。常量是原始碼裡表示的固定值。常量直接表示代碼中不要求計算。如下顯示,原生類型的變數可以賦值常量:

boolean result = true;char capitalC = 'C';byte b = 100;short s = 10000;int i = 100000;Integer Literals

 

整數常量

如果整數常量結尾是字母L或者l,那麼它是long類型,否則它就是int類型。推薦使用大寫字母L,因為小寫字母l和數字1很難區分。

從int常量,可以建立整數byte,short,int,long。long常量,可以建立超出int的範圍的long類型的值。整數常量可以由下面數字系統表達:

十進位:10進位,包含從0到9的數字,這個是你每日都用的數字系統。

十六進位:16進位,包含0到9,字母A到F。

二進位:2進位,包含0到1的數字(Java SE 7和後續版本可以建立二進位常量)。

 

常規編程,十進位系統是使用的唯一的數字系統。但是,如果你在其它數字系統需要使用,下面的例子,示範正確文法。首碼0x指示十六進位,0b指示二進位:

// The number 26, in decimalint decVal = 26;// The number 26, in hexadecimalint hexVal = 0x1a;// The number 26, in binaryint binVal = 0b11010;

 

浮點常量

以字母F或者是f結尾的浮點常量是float類型,否則其它就是double類型,這裡有個可選的選項是以字母D或者d結尾。

浮點型 (浮點和雙精確度) 也可以表示使用 E 或 e (科學記號標記法)、 F 或 f (32 位浮點常量) 和 D 或 d (64 位元雙精確度浮點常量;這是預設設定,按照慣例可以省略)。

double d1 = 123.4;// same value as d1, but in scientific notationdouble d2 = 1.234e2;float f1 = 123.4f;

 

字元和字串常量

char和String常量包含任意Unicode (UTF-16)字元。如果編輯器和檔案系統允許,就可以直接在代碼裡使用字串。如果不允許,使用"Unicode 轉義",例如'\u0108' ,char常量使用’單引號’,String常量使用”雙引號”。Unicode 逸出序列可以用於程式的其他地方(例如欄位名),而不是char或String常量。

java程式設計語言對於char和String常量也支援其他轉義:\b (退格鍵), \t (選項卡), \n (分行符號), \f (換頁符), \r (斷行符號), \" (雙引號), \' (單引號),  \\ (反斜線).

null常量,用於任何參考型別的值。null可以複製給任何變數,處理原生類型。使用null值,可以判斷對象是否存在。所以,null常常用來在程式中標記,指示一些對象不可用。

最後,有一種特別的常量,成為類常量。格式是類型名字加上”.class”;例如,String.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尾碼的前面

在數值期望為字串的位置

下面的例子證明了數值常量中合法和非法的底線位置:

// Invalid: cannot put underscores// adjacent to a decimal pointfloat pi1 = 3_.1415F;// Invalid: cannot put underscores// adjacent to a decimal pointfloat pi2 = 3._1415F;// Invalid: cannot put underscores// prior to an L suffixlong socialSecurityNumber1 = 999_99_9999_L;// This is an identifier, not// a numeric literalint x1 = _52;// OK (decimal literal)int x2 = 5_2;// Invalid: cannot put underscores// At the end of a literalint x3 = 52_;// OK (decimal literal)int x4 = 5_______2;// Invalid: cannot put underscores// in the 0x radix prefixint x5 = 0_x52;// Invalid: cannot put underscores// at the beginning of a numberint x6 = 0x_52;// OK (hexadecimal literal)int x7 = 0x5_2;// Invalid: cannot put underscores// at the end of a numberint x8 = 0x52_;

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.