目录
一、字面量的定义与分类
1.基本概念
- 字面量是直接在代码中写出的固定值(如
3.14
、'A'
、true
)。
- 编译器根据字面量的形式自动推断其数据类型。
- 作用:用于初始化变量、传递参数或直接参与表达式计算。
- 特点:
- 固定值,不可变。
- 书写格式严格遵循 Java 规则。
- 字符串字面量会被 JVM 存入字符串常量池,实现重用。
2.分类
类型 |
示例 |
说明 |
---|---|---|
整型 |
|
默认 |
浮点型 |
|
默认 |
字符型 |
|
单引号包裹;支持 Unicode 转义(如 |
布尔型 |
|
仅两个值,不可用 |
字符串 |
|
双引号包裹;支持转义符(如 |
空值 |
|
表示对象引用为空 |
二、特殊字面量的使用规则
1.整型字面量
- 长整型:必须加
L
后缀(如100L
),否则可能被当作int
导致溢出。
- 十六进制:前缀
0x
或0X
(如0x1F
)。
- 八进制:前缀
0
(如077
),但不推荐使用(易混淆)。
类型 |
示例 |
说明 |
---|---|---|
十进制 |
|
默认为 |
二进制 |
|
以 |
八进制 |
|
以 |
十六进制 |
|
以 |
长整型 |
|
后缀 |
2.浮点型字面量
- 科学计数法:如
1.39e-47f
(表示1.39×10−471.39 \times 10^{-47}1.39×10−47)。
float
必须加F
:若赋值给float
变量不加F
,编译报错(默认double
)。
类型 |
示例 |
说明 |
---|---|---|
单精度 |
|
后缀 |
双精度 |
|
默认为 |
3.字符型字面量
- 可直接用整数赋值(如
char c = 97;
等价于'a'
),范围0-65535
。
类型 |
示例 |
说明 |
---|---|---|
标准字符 |
|
用单引号括起一个字符,支持 Unicode 编码(如 |
转义字符 |
|
用反斜杠 |
4.字符串字面量
- 使用
+
连接(如"x=" + x
),若表达式以字符串开头,后续操作数自动转为字符串。
类型 |
示例 |
说明 |
---|---|---|
普通字符串 |
|
用双引号括起多个字符,内容可为空(如 |
特殊字符 |
|
使用转义字符 |
5.布尔字面量
类型 |
示例 |
说明 |
---|---|---|
布尔值 |
|
仅有的两个值,表示逻辑真或假。 |
6.空字面量
类型 |
示例 |
说明 |
---|---|---|
空引用 |
|
表示对象引用的空值,不能赋值给基本类型变量。 |
三、字面量的类型提升与转换
1.自动类型提升
- 小范围类型可自动提升为大范围类型(如
int
→long
)。
- 示例:
char
可自动提升为int
(取 Unicode 值)。
2.强制类型转换
- 大范围转小范围需显式转换(如
double
→int
),可能丢失精度:
int i = (int) 3.14; // i = 3(截断小数)
四、字面量的注意事项
1.布尔值限制
- 仅允许
true
/false
,不可与整数互换(如if (a)
需写为if (a != 0)
)。
2.数值溢出
- 整数字面量超出类型范围会编译报错(如
int a = 2147483648;
超出int
最大值)。
3.下划线分隔符
- 为提高可读性,数字字面量可用
_
分隔(如1_000_000
)。
4.默认值规则
- 类成员变量未初始化时,字面量有默认值(如
int
默认为0
,boolean
默认为false
)。
五、示例代码
1.字面量的常见使用场景
初始化变量:
int age = 25; // 整数字面量
double price = 9.99; // 浮点数字面量
char grade = 'A'; // 字符字面量
String name = "Java"; // 字符串字面量
boolean flag = true; // 布尔字面量
Object obj = null; // 空字面量
直接参与表达式:
System.out.println(100 + 200); // 整数字面量相加
System.out.println("Hello" + "World"); // 字符串拼接
System.out.println(true && false); // 布尔值逻辑运算
进制转换:
int binary = 0b1010; // 二进制转十进制(10)
int octal = 012; // 八进制转十进制(10)
int hex = 0xA; // 十六进制转十进制(10)
// 整型与浮点型
long big = 0x7FFFFFFFL; // 长整型十六进制
float pi = 3.1415926F; // float 必须加 F
// 字符与字符串
char letter = 65; // 'A'
String msg = "ID: " + 1001; // 字符串拼接
// 科学计数法
double atom = 1.39e-47; // 1.39 × 10⁻⁴⁷
// 布尔值
boolean isValid = true; // 仅允许 true/false
2. 特殊字面量:类字面量(Class Literal)
- 定义:通过
类名.class
获取类的Class
对象。
- 用途:解决泛型类型擦除问题,动态获取类型信息。
- 示例
Class<String> stringClass = String.class; // 获取 String 的 Class 对象
List<String> list = new ArrayList<>(10); // 泛型类型擦除,运行时无法直接获取
六、关键总结
- 类型后缀:
L
(长整型)、F
(浮点型)、D
(双精度,可省略)。
- 特殊字符:
\uXXXX
(Unicode 转义)、\n
(换行符)。
- 字符串特性:拼接时非字符串操作数自动转换,且不可变(修改会创建新对象)。
- 布尔严格性:Java 强制使用
true
/false
,增强代码可读性和安全性。
空字面量的限制:
null
只能赋值给引用类型变量(如String
、Object
),不能赋值给基本类型。
以上内容均基于文档中明确提到的知识点整理,未提及的内容(如二进制字面量)未包含在内。