跳轉到內容

文字常量

100% developed
來自華夏公益教科書,自由的教科書

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

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

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

The code section 3.62 包含兩行程式碼,第一行包含兩個數字字面量和兩個布林值字面量,第二行包含一個字串字面量和一個數字字面量,第三行包含一個字串字面量和一個浮點數字面量。

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

布林值字面量

[edit | edit source]

有兩個布林值字面量

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

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

數字字面量

[edit | edit source]

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

整數字面量

[edit | edit source]

在 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。如果需要短整數字面量,則必須將其強制轉換為 short

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

浮點字面量

[edit | edit source]

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

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 開始,您可以在數字字面量的數字之間插入下劃線。它們會被忽略,但可以幫助提高可讀性,允許程式設計師對數字進行分組。

字元字面量

[edit | edit source]

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

字串字面量

[edit | edit source]

字串字面量由雙引號字元 (")(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
NUL 字元 \0 0 0x00
換行符 \n 10 0x0a
回車符 \r 13 0xd
雙引號 \" 34 0x22
單引號 \' 39 0x27
反斜槓 \\ 92 0x5c

字串字面量可能不包含未轉義的換行符或換行符。但是,Java 編譯器會計算編譯時表示式,因此以下 String 表示式會生成一個包含三行文字的字串

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"


華夏公益教科書