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


原文出自 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 decimal
int decVal = 26;
// The number 26, in hexadecimal
int hexVal = 0x1a;
// The number 26, in binary
int 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 notation
double 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 point
float pi1 = 3_.1415F;
// Invalid: cannot put underscores
// adjacent to a decimal point
float pi2 = 3._1415F;
// Invalid: cannot put underscores
// prior to an L suffix
long socialSecurityNumber1 = 999_99_9999_L;

// This is an identifier, not
// a numeric literal
int x1 = _52;
// OK (decimal literal)
int x2 = 5_2;
// Invalid: cannot put underscores
// At the end of a literal
int x3 = 52_;
// OK (decimal literal)
int x4 = 5_______2;

// Invalid: cannot put underscores
// in the 0x radix prefix
int x5 = 0_x52;
// Invalid: cannot put underscores
// at the beginning of a number
int x6 = 0x_52;
// OK (hexadecimal literal)
int x7 = 0x5_2;
// Invalid: cannot put underscores
// at the end of a number
int x8 = 0x52_;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM