跳转到内容

字面量

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"


华夏公益教科书