文字常量
导航 语言基础 主题: ) |
Java 字面量 是布尔值、字符、数字或字符串数据的语法表示形式。字面量提供了一种在程序中表达特定值的方法。例如,在以下语句中,声明了一个名为 count
的整数变量并为其分配了一个整数值。字面量 0
自然地表示值为零。
代码节 3.61:数字字面量。
int count = 0;
|
The code section 3.62 包含两行代码,第一行包含两个数字字面量和两个布尔值字面量,第二行包含一个字符串字面量和一个数字字面量,第三行包含一个字符串字面量和一个浮点数字面量。
代码节 3.62:字面量。
(2 > 3) ? true : false;
"text".substring(2);
System.out.println("Display a hard coded float: " + 37.19f);
|
布尔值字面量
[edit | edit source]有两个布尔值字面量
没有其他布尔值字面量,因为没有其他布尔值!
数字字面量
[edit | edit source]Java 中有三种类型的数字字面量。
整数字面量
[edit | edit source]在 Java 中,您可以以几种格式输入整数。
- 作为十进制数,例如
1995
、51966
。负十进制数,例如-42
,实际上是包含带一元否定运算符-
的整数字面量的表达式。 - 作为八进制数,使用前导
0
(零)数字和一个或多个额外的八进制数字(0
到7
之间的数字),例如077
。八进制数可能计算为负数;例如037777777770
实际上是十进制值 -8。 - 作为十六进制数,使用
0x
(或0X
)的形式后跟一个或多个十六进制数字(0
到9
、a
到f
或A
到F
的数字)。例如,0xCAFEBABEL 是长整数 3405691582。与八进制数一样,十六进制字面量可能表示负数。 - 从 J2SE 7.0 开始,作为二进制数,使用
0b
(或0B
)的形式后跟一个或多个二进制数字(0 或 1)。例如,0b101010 是整数 42。与八进制和十六进制数一样,二进制字面量可能表示负数。
默认情况下,整数字面量基本类型为 int
。如果需要 long
,请在整数字面量中添加一个字母 el 后缀(字符 l
或字符 L
)。此后缀表示长整数而不是标准整数。例如,3405691582L
是一个长整数字面量。长整数的长度为 8 字节,而 int
的长度为 4 字节。最好使用后缀 L
而不是 l
以避免与数字 1
(一)混淆,在许多字体中 l
看起来像 1
:200l
≠ 2001
。如果需要短整数字面量,则必须将其强制转换为 short
。
从 J2SE 7.0 开始,您可以在数字字面量的数字之间插入下划线。它们会被忽略,但可以帮助提高可读性,允许程序员对数字进行分组。
浮点字面量
[edit | edit source]浮点数表示为十进制分数或指数表示法
代码节 3.63:浮点字面量。
double decimalNumber = 5.0;
decimalNumber = 89d;
decimalNumber = 0.5;
decimalNumber = 10f;
decimalNumber = 3.14159e0;
decimalNumber = 2.718281828459045D;
decimalNumber = 1.0e-6D;
|
浮点数由以下部分组成
- 可选的前导
+
或-
符号,表示正值或负值;如果省略,则值为正数。 - 以下数字格式之一
- 整数数字(必须后跟指数或后缀或两者,以将其与整数字面量区分开来)
- 整数数字
.
- 整数数字
.
整数数字 .
整数数字
- 可选的指数,形式为
- 指数指示器
e
或E
- 可选的指数符号
+
或-
(默认值为正指数) - 整数数字,表示整数指数值
- 指数指示器
- 可选的浮点后缀
f
或F
表示单精度(4 字节)浮点数,或d
或D
表示该数字为双精度浮点数(默认情况下,因此双精度(8 字节)为默认值)。
这里,整数数字表示一个或多个 0
到 9
的数字。
从 J2SE 7.0 开始,您可以在数字字面量的数字之间插入下划线。它们会被忽略,但可以帮助提高可读性,允许程序员对数字进行分组。
字符字面量
[edit | edit source]字符字面量是嵌入在 Java 程序中的常量值字符表达式。Java 字符是 16 位 Unicode 字符,范围从 0 到 65535。字符字面量在 Java 中表示为单引号、字符和结束单引号('a'
、'7'
、'$'
、'π'
)。字符字面量类型为 char
,一种无符号整数 基本类型。字符字面量可以安全地提升为更大的整数类型,例如 int
和 long
。在需要 short
或 byte
的地方使用的字符字面量必须强制转换为 short
或 byte
,因为可能会发生截断。
字符串字面量
[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 表达式会生成一个包含三行文本的字符串
代码节 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 会抛出 NullPointerException
。null
通常用于表示未初始化状态。
在连接运算中,括号内的值首先被连接。然后从左到右连接值。在字符串连接运算中混合字符字面量和整数时要小心。
|
|
出现意外结果是因为'1'
和 '0'
被转换了两次。表达式按如下方式连接
"120? " + one + '2' + zero
|
"120? " + 49 + '2' + 48
|
"120? 49" + '2' + 48
|
"120? 492" + 48
|
"120? 49248"
|
one
和zero
是整数。所以它们存储整数值。'1'
的整数值为 49,'0'
的整数值为 48。- 因此,第一个连接连接了
"120? "
和49
。49
首先被转换为字符串,生成"49"
,连接返回字符串"120? 49"
。 - 第二个连接连接了
"120? 49"
和'2'
。'2'
被转换为字符串"2"
,连接返回字符串"120? 492"
。 "120? 492"
和'0'
之间的连接返回字符串"120? 49248"
。
代码段 66 产生了预期结果。
|
|
问题 3.9:考虑以下代码
|
|
解释所见结果。
对于第一行
" 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"
|