在Java源代碼中,字面值用於表示固定的值(fixed value)。數值型的字面值是最常見的,字符串字面值可以算是一種,當然也可以把特殊的null當做字面值。字面值大體上可以分為整型字面值、浮點字面值、字符和字符串字面值、特殊字面值。
1. 整型字面值
從形式上看是整數的字面值歸類為整型字面值。例如: 10, 100000L, 'B'、0XFF這些都可以稱為字面值。整型字面值可以用十進制、16、8、2進制來表示。十進制很簡單,2、8、16進制的表示分別在最前面加上0B(0b)、0、0X(0x)即可,當然基數不能超出進制的范圍,比如09是不合法的,八進制的基數只能到7。一般情況下,字面值創建的是int類型,但是int字面值可以賦值給byte short char long int,只要字面值在目標范圍以內,Java會自動完成轉換,如果試圖將超出范圍的字面值賦給某一類型(比如把128賦給byte類型),編譯通不過。而如果想創建一個int類型無法表示的long類型,則需要在字面值最后面加上L或者l。通常建議使用容易區分的L。所以整型字面值包括int字面值和long字面值兩種。
2. 浮點字面值
浮點字面值簡單的理解可以理解為小數。分為float字面值和double字面值,如果在小數后面加上F或者f,則表示這是個float字面值,如11.8F。如果小數后面不加F(f),如10.4。或者小數后面加上D(d),則表示這是個double字面值。另外,浮點字面值支持科學技術法表示。下面是一些例子:
double d1 = 10;
double d2 = 11.4; double d3 = 1.23E3; double d4 = 10D; double d5 = 0.4D; float f1 = 10; float f2 = 11.1F; float f3 = 1.23e-4F; float f4 = 1.23E0F;
3 字符及字符串字面值
Java中字符字面值用單引號括起來,如‘@’‘1’。所有的UTF-16字符集都包含在字符字面值中。不能直接輸入的字符,可以使用轉義字符,如‘\n’為換行字符。也可以使用八進制或者十六進制表示字符,八進制使用反斜杠加3位數字表示,例如'\141'表示字母a。十六進制使用\u加上4為十六進制的數表示,如'\u0061'表示字符a。也就是說,通過使用轉義字符,可以表示鍵盤上的有的或者沒有的所有字符。常見的轉義字符序列有:
\ddd(八進制) 、 \uxxxx(十六進制Unicode字符)、\'(單引號)、\"(雙引號)、\\ (反斜杠)\r(回車符) \n(換行符) \f(換頁符) \t(制表符) \b(回格符)
字符串字面值則使用雙引號,字符串字面值中同樣可以包含字符字面值中的轉義字符序列。字符串必須位於同一行或者使用+運算符,因為java沒有續行轉義序列。
4 特殊字面值
null是一種特殊的類型(type),可以將它賦給任何引用類型變量,表示這個變量不引用任何東西。如果一個引用類型變量為null,表示這個變量不可用。
還有一種特殊的class literal,用type name加上.class表示,例如String.class。首先,String是類Class(java.lang.Class)的一個實例(對象),而"This is a string"是類String的一個對象。然后,class literal用於表示類Class的一個對象,比如String.class用於表示類Class的對象String。簡單地說,類子面子(class literal)就是諸如String.class 、Integer.class這樣的字面值,它所表示的就是累String、類Integer。如果輸出Integer.class,你會得到class java.lang.Integer。List.class的輸出為interface java.util.List。總之,class literal用於表示類型本身!
5 在數值型字面值中使用下划線。
JDK7開始,可以在數值型字面值(包括整型字面值和浮點字面值)插入一個或者多個下划線。但是下划線只能用於分隔數字,不能分隔字符與字符,也不能分隔字符與數字。例如 int x = 123_456_789.在編譯的時候,下划線會自動去掉。可以連續使用下划線,比如float f = 1.22___33__44.二進制或者十六進制的字面值也可以使用下划線,記住一點,下划線只能用於數字與數字之間,初次以外都是非法的。例如1._23是非法的,_123、11000_L都是非法的。