跳转到内容

字面量

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"


华夏公益教科书