字面量
| 導航 語言基礎 主題: |
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 字元是十六位 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 |
| 製表符 | \t
|
9 | 0x09 |
| 空字元 | \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";
|
null 是一個特殊的 Java 字面量,代表一個空值:一個不引用任何物件的數值。嘗試解除引用空值會導致錯誤 - Java 將丟擲 NullPointerException。 null 通常用於表示未初始化的狀態。
在連線運算中,方括號中的值會首先被連線。然後從左到右連線值。在字串連線操作中混合字元字面量和整數時要小心
|
|
出現意外結果的原因是 '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"
|