字面量
| 導航 語言基礎 主題: |
Java **字面量** 是布林、字元、數字或字串資料的語法表示。字面量提供了一種在程式中表達特定值的方法。例如,在以下語句中,聲明瞭一個名為 count 的整數變數併為其分配了一個整數值。字面量 0 表示值零,這很自然。
程式碼部分 3.61:數字字面量。
int count = 0;
|
程式碼部分 3.62 包含第 1 行的兩個數字字面量,後跟兩個布林字面量,第 2 行的字串字面量,後跟一個數字字面量,以及第 3 行的字串字面量,後跟一個實數字面量。
程式碼部分 3.62:字面量。
(2 > 3) ? true : false;
"text".substring(2);
System.out.println("Display a hard coded float: " + 37.19f);
|
有兩個布林字面量
沒有其他布林字面量,因為沒有其他布林值!
Java 中有三種類型的數字字面量。
在 Java 中,你可以用多種格式輸入整數。
- 作為十進位制數字,例如
1995、51966。負十進位制數字,例如-42,實際上是包含整數字面量和一元否定運算子-的 *表示式*。 - 作為八進位制數字,使用前導
0(零)數字和一個或多個附加的八進位制數字(0到7之間的數字),例如077。八進位制數字可能計算為負數;例如037777777770實際上是十進位制值 -8。 - 作為十六進位制數字,使用
0x(或0X)的形式,後跟一個或多個十六進位制數字(0到9、a到f或A到F的數字)。例如,0xCAFEBABEL 是長整數 3405691582。與八進位制數字一樣,十六進位制字面量可能代表負數。 - 從 J2SE 7.0 開始,作為二進位制數字,使用
0b(或0B)的形式,後跟一個或多個二進位制數字(0 或 1)。例如,0b101010 是整數 42。與八進位制和十六進位制數字一樣,二進位制字面量可能代表負數。
預設情況下,整數字面量的基本型別是 int。如果你想要一個 long,在整數字面量後面新增一個字母 el 字尾(字元 l 或字元 L)。這個字尾表示一個 *長整數* 而不是一個標準整數。例如,3405691582L 是一個長整數字面量。長整數的長度為 8 位元組,而 int 的標準長度為 4 位元組。最佳實踐是使用字尾 L 而不是 l,以避免與數字 1(一)混淆,因為在許多字型中 l 看起來像 1:200l ≠ 2001。如果你想要一個短整數字面量,你必須將其強制轉換。
從 J2SE 7.0 開始,你可以在數字字面量的數字之間插入下劃線。它們會被忽略,但可以透過允許程式設計師對數字進行分組來提高可讀性。
浮點數表示為十進位制小數或指數表示法
程式碼部分 3.63:浮點字面量。
double decimalNumber = 5.0;
decimalNumber = 89d;
decimalNumber = 0.5;
decimalNumber = 10f;
decimalNumber = 3.14159e0;
decimalNumber = 2.718281828459045D;
decimalNumber = 1.0e-6D;
|
浮點數包含
- 可選的前導
+或-符號,表示正值或負值;如果省略,則值為正值, - 以下數字格式之一
- 整數數字(必須後跟指數或字尾或兩者,以將其與整數字面量區分開來)
- 整數數字
. - 整數數字
.整數數字 .整數數字
- 可選的指數,形式為
- 指數指示符
e或E - 可選的指數符號
+或-(預設值為正指數) - 整數數字,表示整數指數值
- 指數指示符
- 可選的浮點字尾
f或F,表示單精度(4 位元組)浮點數,或d或D,表示該數字是雙精度浮點數(預設情況下,因此雙精度(8 位元組)是預設值)。
這裡,整數數字 表示一個或多個數字 0 到 9。
從 J2SE 7.0 開始,你可以在數字字面量的數字之間插入下劃線。它們會被忽略,但可以透過允許程式設計師對數字進行分組來提高可讀性。
字元字面量是在 Java 程式中嵌入的恆定值字元表示式。Java 字元是 16 位 Unicode 字元,範圍從 0 到 65535。Java 中的字元字面量用單引號、字元和結束單引號 ('a'、'7'、'$'、'π') 表示。字元字面量的型別為 char,這是一個無符號整數 基本型別。字元字面量可以安全地提升到更大的整數型別,例如 int 和 long。在需要 short 或 byte 的地方使用的字元字面量必須強制轉換為 short 或 byte,因為可能發生截斷。
字串字面量由雙引號字元 (")(ASCII 34,十六進位制 0x22)、零個或多個字元(包括 Unicode 字元)以及結束雙引號字元 (") 組成,例如:"Ceci est une string."
因此,字串字面量遵循以下語法
<STRING :
"\""
( (~["\"","\\","\n","\r"])
|("\\"
( ["n","t","b","r","f","\\","'","\""]
|["0"-"7"](["0"-"7"])?
|["0"-"3"]["0"-"7"]["0"-"7"]
)
)
)*
"\"">
在字串和字元字面量中,反斜槓字元可以用來轉義特殊字元,例如 Unicode 轉義序列,或以下特殊字元
| 名稱 | 字元 | ASCII | 十六進位制 |
|---|---|---|---|
| 退格 | \b
|
8 | 0x08 |
| TAB | \t
|
9 | 0x09 |
| NUL 字元 | \0
|
0 | 0x00 |
| 換行 | \n
|
10 | 0x0a |
| 回車符 | \r
|
13 | 0xd |
| 雙引號 | \"
|
34 | 0x22 |
| 單引號 | \'
|
39 | 0x27 |
| 反斜槓 | \\
|
92 | 0x5c |
字串字面量不能包含未轉義的換行符或換行符。但是,Java 編譯器將評估編譯時表示式,因此以下字串表示式將產生一個包含三行文字的字串。
程式碼部分 3.64:多行字串。
String text = "This is a String literal\n"
+ "which spans not one and not two\n"
+ "but three lines of text.\n";
|
空 是一個特殊的 Java 字面量,它表示一個空值:一個不引用任何物件的 值。嘗試解除引用空值會導致錯誤 - Java 會丟擲 NullPointerException。空 通常用來表示未初始化狀態。
在連線操作中,括號中的值將首先連線起來。然後,從左到右連線值。在字串連線操作中混合字元字面量和整數時要小心。
|
|
出現意外結果是因為 '1' 和 '0' 被轉換了兩次。表示式按以下方式連線
"120? " + one + '2' + zero
|
"120? " + 49 + '2' + 48
|
"120? 49" + '2' + 48
|
"120? 492" + 48
|
"120? 49248"
|
one和zero是整數。因此它們儲存整數值。'1'的整數值為 49,'0'的整數值為 48。- 因此,第一次連線連線
"120? "和49。49首先轉換為字串,產生"49",連線返回字串"120? 49"。 - 第二次連線連線
"120? 49"和'2'。'2'被轉換為字串"2",連線返回字串"120? 492"。 "120? 492"和'0'之間的連線返回字串"120? 49248"。
程式碼部分 66 生成了所需的結果
|
|
問題 3.9:考慮以下程式碼
|
|
解釋看到的結果。
對於第一行
" 3? " + (one + '2' + zero)
|
" 3? " + (49 + '2' + 48)
|
" 3? " + (99 + 48)
|
" 3? " + 147
|
" 3? 147"
|
對於第二行
"102? " + 100 + '2' + 0
|
"102? 100" + '2' + 0
|
"102? 1002" + 0
|
"102? 10020"
|
對於最後一行
"102? " + (100 + '2' + 0)
|
"102? " + (150 + 0)
|
"102? " + 150
|
"102? 150"
|