跳轉到內容

字面量

100% developed
來自華夏公益教科書,自由的教科書,面向開放世界

導航 語言基礎 主題:v  d  e )

Java **字面量** 是布林、字元、數字或字串資料的語法表示。字面量提供了一種在程式中表達特定值的方法。例如,在以下語句中,聲明瞭一個名為 count 的整數變數併為其分配了一個整數值。字面量 0 表示值零,這很自然。

Example 程式碼部分 3.61:數字字面量。
int count = 0;

程式碼部分 3.62 包含第 1 行的兩個數字字面量,後跟兩個布林字面量,第 2 行的字串字面量,後跟一個數字字面量,以及第 3 行的字串字面量,後跟一個實數字面量。

Example 程式碼部分 3.62:字面量。
(2 > 3) ? true : false;
"text".substring(2);
System.out.println("Display a hard coded float: " + 37.19f);

布林字面量

[編輯 | 編輯原始碼]

有兩個布林字面量

  • true 表示一個布林真值
  • false 表示一個布林假值

沒有其他布林字面量,因為沒有其他布林值!

數字字面量

[編輯 | 編輯原始碼]

Java 中有三種類型的數字字面量。

整數字面量

[編輯 | 編輯原始碼]

在 Java 中,你可以用多種格式輸入整數。

  1. 作為十進位制數字,例如 199551966。負十進位制數字,例如 -42,實際上是包含整數字面量和一元否定運算子 - 的 *表示式*。
  2. 作為八進位制數字,使用前導 0(零)數字和一個或多個附加的八進位制數字(07 之間的數字),例如 077。八進位制數字可能計算為負數;例如 037777777770 實際上是十進位制值 -8。
  3. 作為十六進位制數字,使用 0x(或 0X)的形式,後跟一個或多個十六進位制數字(09afAF 的數字)。例如,0xCAFEBABEL 是長整數 3405691582。與八進位制數字一樣,十六進位制字面量可能代表負數。
  4. 從 J2SE 7.0 開始,作為二進位制數字,使用 0b(或 0B)的形式,後跟一個或多個二進位制數字(0 或 1)。例如,0b101010 是整數 42。與八進位制和十六進位制數字一樣,二進位制字面量可能代表負數。

預設情況下,整數字面量的基本型別是 int。如果你想要一個 long,在整數字面量後面新增一個字母 el 字尾(字元 l 或字元 L)。這個字尾表示一個 *長整數* 而不是一個標準整數。例如,3405691582L 是一個長整數字面量。長整數的長度為 8 位元組,而 int 的標準長度為 4 位元組。最佳實踐是使用字尾 L 而不是 l,以避免與數字 1(一)混淆,因為在許多字型中 l 看起來像 1200l2001。如果你想要一個短整數字面量,你必須將其強制轉換。

從 J2SE 7.0 開始,你可以在數字字面量的數字之間插入下劃線。它們會被忽略,但可以透過允許程式設計師對數字進行分組來提高可讀性。

浮點字面量

[編輯 | 編輯原始碼]

浮點數表示為十進位制小數或指數表示法

Example 程式碼部分 3.63:浮點字面量。
double decimalNumber = 5.0;
decimalNumber = 89d;
decimalNumber = 0.5;
decimalNumber = 10f;
decimalNumber = 3.14159e0;
decimalNumber = 2.718281828459045D;
decimalNumber = 1.0e-6D;

浮點數包含

  1. 可選的前導 +- 符號,表示正值或負值;如果省略,則值為正值,
  2. 以下數字格式之一
    • 整數數字(必須後跟指數或字尾或兩者,以將其與整數字面量區分開來)
    • 整數數字 .
    • 整數數字 . 整數數字
    • . 整數數字
  3. 可選的指數,形式為
    • 指數指示符 eE
    • 可選的指數符號 +-(預設值為正指數)
    • 整數數字,表示整數指數值
  4. 可選的浮點字尾
    • fF,表示單精度(4 位元組)浮點數,或
    • dD,表示該數字是雙精度浮點數(預設情況下,因此雙精度(8 位元組)是預設值)。

這裡,整數數字 表示一個或多個數字 09

從 J2SE 7.0 開始,你可以在數字字面量的數字之間插入下劃線。它們會被忽略,但可以透過允許程式設計師對數字進行分組來提高可讀性。

字元字面量

[編輯 | 編輯原始碼]

字元字面量是在 Java 程式中嵌入的恆定值字元表示式。Java 字元是 16 位 Unicode 字元,範圍從 0 到 65535。Java 中的字元字面量用單引號、字元和結束單引號 ('a''7''$''π') 表示。字元字面量的型別為 char,這是一個無符號整數 基本型別。字元字面量可以安全地提升到更大的整數型別,例如 intlong。在需要 shortbyte 的地方使用的字元字面量必須強制轉換為 shortbyte,因為可能發生截斷。

字串字面量

[編輯 | 編輯原始碼]

字串字面量由雙引號字元 (")(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 編譯器將評估編譯時表示式,因此以下字串表示式將產生一個包含三行文字的字串。

Example 程式碼部分 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 通常用來表示未初始化狀態。

混合模式操作

[編輯 | 編輯原始碼]

在連線操作中,括號中的值將首先連線起來。然後,從左到右連線值。在字串連線操作中混合字元字面量和整數時要小心。

Example 程式碼部分 3.65:連線操作。
int one = '1';
int zero = '0';

System.out.println("120? " + one + '2' + zero);
Standard input or output 程式碼部分 3.65 的控制檯
120? 49248

出現意外結果是因為 '1''0' 被轉換了兩次。表示式按以下方式連線

"120? " + one + '2' + zero
"120? " + 49 + '2' + 48
"120? 49" + '2' + 48
"120? 492" + 48
"120? 49248"
  1. onezero 是整數。因此它們儲存整數值。'1' 的整數值為 49,'0' 的整數值為 48。
  2. 因此,第一次連線連線 "120? "4949 首先轉換為字串,產生 "49",連線返回字串 "120? 49"
  3. 第二次連線連線 "120? 49"'2''2' 被轉換為字串 "2",連線返回字串 "120? 492"
  4. "120? 492"'0' 之間的連線返回字串 "120? 49248"

程式碼部分 66 生成了所需的結果

Example 程式碼部分 3.66:正確的基本型別。
char one = '1';
char zero = '0';

System.out.println("120? " + one + '2' + zero);
Standard input or output 程式碼部分 3.66 的控制檯
120? 120
測試你的知識

問題 3.9:考慮以下程式碼

Example 問題 3.9:新的連線操作。
int one = '1';
int zero = '0';

System.out.println("  3? " + (one + '2' + zero));
System.out.println("102? " + 100 + '2' + 0);
System.out.println("102? " + (100 + '2' + 0));
Standard input or output 問題 3.9 的控制檯
  3? 147
102? 10020
102? 150

解釋看到的結果。

答案

對於第一行

" 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"


華夏公益教科書