跳轉到內容

字面量

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 字元是十六位 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
製表符 \t 9 0x09
空字元 \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";

null 是一個特殊的 Java 字面量,代表一個空值:一個不引用任何物件的數值。嘗試解除引用空值會導致錯誤 - Java 將丟擲 NullPointerExceptionnull 通常用於表示未初始化的狀態。

混合模式運算

[編輯 | 編輯原始碼]

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

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"


華夏公益教科書