概要:什么是字面值
字面值是指在程序中無需變量保存,可直接表示為一個具體的數字或字符串的值。比如
在a = b * 2
這個語句中,2就是一個字面值,它本身就是一個具體的值。
在Java源代碼中,字面值用於表示固定的值(fixed value)。數值型的字面值是最常見的,字符串字面值可以算是一種,當然也可以把特殊的null當做字面值。字面值大體上可以分為整型字面值、浮點字面值、字符和字符串字面值、特殊字面值。
1. 整型字面值
從形式上看是整數的字面值歸類為整型字面值。例如: 10, 100000L, 'B'、0XFF這些都可以稱為整型字面值。整型字面值可以用十進制、十六、八、二進制來表示。十進制很簡單,二、八、十六進制的表示分別在最前面加上0B(0b)、0、0X(0x)即可,一般情況下,字面值創建的是int類型,但是int字面值可以賦值給byte, short ,char ,long ,int,只要字面值在目標范圍以內,Java會自動完成轉換,如果試圖將超出范圍的字面值賦給某一類型(比如把128賦給byte類型),編譯通不過。而如果想創建一個int類型無法表示的long類型,則需要在字面值最后面加上L或者l。通常建議使用容易區分的L。所以整型字面值包括int字面值和long字面值兩種。
2. 浮點字面值
浮點字面值簡單的理解可以理解為小數。分為float字面值和double字面值,如果在小數后面加上F或者f,則表示這是個float字面值,如1.8F。如果小數后面不加F(f),如10.4。或者小數后面加上D(d),則表示這是個double字面值。另外,浮點字面值支持科學技術法表示。
float f1 = 1.23e-4F; float f2 = 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開始,可以在數值型字面值(包括整型字面值和浮點字面值)插入一個或者多個下划線。但是下划線只能用於分隔數字,不能分隔字符與字符,也不能分隔字符與數字。
規則如下:
- 僅限單條下划線 ,不能多條相連。
- 數值開頭和結尾不能出現下划線。
- F、D 和 L的前后不能出現下划線。
- 二進制前導 b 和 十六進制 x 前后不能出現下划線。
public class Underline { public static void main(String[] args) { double d = 123_456_789.123_345; System.out.println(d); int i = 0b1111_1010_1111_1010_1111_1010_1111; System.out.println(Integer.toBinaryString(i)); System.out.printf("%x%n", i); long l = 0xfa_fa_fa_f; System.out.printf("%x%n", l); } }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
注意: Java 中 System.out.printf() 或 System.out.format() 中可以使用 %n
實現忽略平台間差異的換行符。對於 System.out.println(),仍然必須使用 \n
。
參考:Java完全參考手冊第八版