字面量#

在 Java 中,所有原始类型、字符串和空类型都可在源代码中用字面量表示。

JLS 规定,字面量(Literal)就是原始类型、字符串和空类型在源代码中的表现形式。所有字面量都属于基本表达式(Primary expression)。

整数#

整数的字面量有四种形式,分别为十进制、十六进制、八进制和二进制。其中,十六、八、二进制具有特殊的前缀,分别为0x00b(不区分大小写)。

十进制允许数字0~9,十六进制额外允许字母A~F(不区分大小写)表示10~15。八进制允许数字0~7。二进制只允许数字0和1。

Java 允许在整数中的两个数字之间添加多个下划线。

整数字面量的原始类型为int,若添加Ll后缀则为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

浮点数#

浮点数的字面量有十进制和十六进制形式。十六进制形式的前缀为0x0X

浮点数字面量由整数部分、小数点、小数部分、指数和后缀组成。

十进制浮点数至少有一位数字(整数或小数部分)和小数点、指数、后缀其中一个。指数以eE开始并紧接着一个有符号的整数。

十六进制浮点数至少有一位数字(整数或小数部分)以及指数。指数以pP开始并紧接着一个有符号的整数。

Java 允许在浮点数中整数、小数、指数部分的两个数字之间添加多个下划线。

浮点数的后缀可选,fF后缀表示float类型,dD或不加后缀表示double类型。

JLS 提供的浮点数实例

float
1e1f    2.f    .3f    0f    3.14f    6.022137e+23f
double
1e1    2.    .3    0.0    3.14    1e-9d    1e137

布尔值#

布尔值的字面量为truefalse(区分大小写),分别表示真与假。

字符#

字符(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(区分大小写),表示空引用。