字面量#
在 Java 中,所有原始类型、字符串和空类型都可在源代码中用字面量表示。
JLS 规定,字面量(Literal)就是原始类型、字符串和空类型在源代码中的表现形式。所有字面量都属于基本表达式(Primary expression)。
整数#
整数的字面量有四种形式,分别为十进制、十六进制、八进制和二进制。其中,十六、八、二进制具有特殊的前缀,分别为0x
、0
和0b
(不区分大小写)。
十进制允许数字0~9,十六进制额外允许字母A~F(不区分大小写)表示10~15。八进制允许数字0~7。二进制只允许数字0和1。
Java 允许在整数中的两个数字之间添加多个下划线。
整数字面量的原始类型为int
,若添加L
或l
后缀则为long
。小写l
容易与数字1
混淆,所以建议使用大写L
。
JLS 提供的整数实例
int
0 2 0372 0xDada_Cafe 1996 0x00_FF__00_FF
long
0l 0777L 0x100000000L 2_147_483_648L 0xC0B0L
浮点数#
浮点数的字面量有十进制和十六进制形式。十六进制形式的前缀为0x
或0X
。
浮点数字面量由整数部分、小数点、小数部分、指数和后缀组成。
十进制浮点数至少有一位数字(整数或小数部分)和小数点、指数、后缀其中一个。指数以e
或E
开始并紧接着一个有符号的整数。
十六进制浮点数至少有一位数字(整数或小数部分)以及指数。指数以p
或P
开始并紧接着一个有符号的整数。
Java 允许在浮点数中整数、小数、指数部分的两个数字之间添加多个下划线。
浮点数的后缀可选,f
和F
后缀表示float
类型,d
、D
或不加后缀表示double
类型。
JLS 提供的浮点数实例
float
1e1f 2.f .3f 0f 3.14f 6.022137e+23f
double
1e1 2. .3 0.0 3.14 1e-9d 1e137
布尔值#
布尔值的字面量为true
和false
(区分大小写),分别表示真与假。
字符#
字符(char
)的字面量为用半角单引号'
括起来的一个字符或一个转义序列。
以下皆为字符的字面量:
'a'
'%'
'\t'
'\\'
'\''
'\u03a9'
'\uFFFF'
'\177'
'™'
字符串#
字符串(String
)的字面量由半角双引号"
括起来的零个或多个字符和转义序列组成。字符串字面量不支持换行。示例如下:
"" // 空字符串
"\"" // 含一个双引号(")的字符串
"This is a string" // 含16个字符的字符串
文本块#
文本块的类型和字符串一样,不同的是,文本块支持换行。文本块以三个半角双引号"""
和一个换行符开始,以三个半角双引号结束。示例如下:
// 用文本块表示 HTML
"""
<html>
<body>
<p>Hello, world</p>
</body>
</html>
"""
Unicode 转义#
Java 编译器首先将 Unicode 转义转换成对应的字符。Unicode 转义由\u
开始,随后为4个十六进制数字。
转义序列#
转义序列用于在字符、字符串和文本块字面量中表示特殊符号。Java 有以下转义序列:
\b
:退格(\u0008
)\s
:空格(\u0020
)\t
:水平制表符(\u0009
)\n
:换行(\u000a
)\f
:换页(\u000c
)\r
:回车(\u000d
)\
接换行符:无\"
:双引号(\u0022
)\'
:单引号(\u0027
)\\
:反斜杠(\u005c
)\
接八进制数字(\u0000
~\u00ff
)
\
接换行符没有 Unicode 转义的表现形式,因此在文本块中其会被删除,如:
"""
Hello \
world"""
等效于:
"Hello world"
空类型#
空类型的字面量为null
(区分大小写),表示空引用。