標籤:
在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都是非法的。
Java基礎-字面值