跳转到内容

文字常量

100% developed
来自维基教科书,自由的教科书

导航 语言基础 主题: v  d  e )

Java 字面量 是布尔值、字符、数字或字符串数据的语法表示形式。字面量提供了一种在程序中表达特定值的方法。例如,在以下语句中,声明了一个名为 count 的整数变量并为其分配了一个整数值。字面量 0 自然地表示值为零。

Example 代码节 3.61:数字字面量。
int count = 0;

The code section 3.62 包含两行代码,第一行包含两个数字字面量和两个布尔值字面量,第二行包含一个字符串字面量和一个数字字面量,第三行包含一个字符串字面量和一个浮点数字面量。

Example 代码节 3.62:字面量。
(2 > 3) ? true : false;
"text".substring(2);
System.out.println("Display a hard coded float: " + 37.19f);

布尔值字面量

[edit | edit source]

有两个布尔值字面量

  • true 代表一个真布尔值
  • false 代表一个假布尔值

没有其他布尔值字面量,因为没有其他布尔值!

数字字面量

[edit | edit source]

Java 中有三种类型的数字字面量。

整数字面量

[edit | edit source]

在 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。如果需要短整数字面量,则必须将其强制转换为 short

从 J2SE 7.0 开始,您可以在数字字面量的数字之间插入下划线。它们会被忽略,但可以帮助提高可读性,允许程序员对数字进行分组。

浮点字面量

[edit | edit source]

浮点数表示为十进制分数或指数表示法

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 开始,您可以在数字字面量的数字之间插入下划线。它们会被忽略,但可以帮助提高可读性,允许程序员对数字进行分组。

字符字面量

[edit | edit source]

字符字面量是嵌入在 Java 程序中的常量值字符表达式。Java 字符是 16 位 Unicode 字符,范围从 0 到 65535。字符字面量在 Java 中表示为单引号、字符和结束单引号('a''7''$''π')。字符字面量类型为 char,一种无符号整数 基本类型。字符字面量可以安全地提升为更大的整数类型,例如 intlong。在需要 shortbyte 的地方使用的字符字面量必须强制转换为 shortbyte,因为可能会发生截断。

字符串字面量

[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 表达式会生成一个包含三行文本的字符串

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"


华夏公益教科书