基本数据类型
Java 提供了 8 种基本数据类型,用于存储简单的数据值,它们不属于对象,直接存储在栈内存中,具有更高的执行效率。以下是这 8 种基本数据类型及其用法:
1. 整数类型(4 种)
用于存储整数值,根据表示范围不同分为以下 4 种:
| 类型 | 占用字节 | 表示范围 | 用法示例 |
|---|---|---|---|
byte | 1 字节 | -128 ~ 127 | byte age = 25; |
short | 2 字节 | -32768 ~ 32767 | short score = 95; |
int | 4 字节 | -2^31 ~ 2^31-1(约 -21 亿~21 亿) | int population = 1000000; |
long | 8 字节 | -2^63 ~ 2^63-1(更大范围的整数) | long distance = 123456789L;(注意末尾加 L 或 l 区分) |
特点:
- 默认整数类型是
int,如果数值超过int范围,必须显式声明为long(加L)。 - 适用于存储年龄、数量、整数 ID 等无小数的场景。
2. 浮点类型(2 种)
用于存储带小数的数值:
| 类型 | 占用字节 | 表示范围(近似) | 精度 | 用法示例 |
|---|---|---|---|---|
float | 4 字节 | ±3.402823e+38(约 ±3.4×10³⁸) | 单精度(约 6-7 位小数) | float pi = 3.14f;(末尾加 F 或 f) |
double | 8 字节 | ±1.797693e+308(约 ±1.8×10³⁰⁸) | 双精度(约 15-17 位小数) | double price = 99.99; |
特点:
- 默认浮点类型是
double,声明float时必须加F(否则会被识别为double导致编译错误)。 - 浮点类型存在精度误差(基于二进制存储),如需精确计算(如货币),建议使用
BigDecimal类。
3. 字符类型(1 种)
用于存储单个字符( Unicode 字符):
| 类型 | 占用字节 | 表示范围 | 用法示例 |
|---|---|---|---|
char | 2 字节 | 0 ~ 65535(对应 Unicode 字符集) | char c = 'A';(单引号包裹) char chinese = '中';(支持中文等 Unicode 字符) |
特点:
- 本质上存储的是字符对应的 Unicode 编码值,可参与整数运算(如
'A' + 1结果为 66,对应字符'B')。
4. 布尔类型(1 种)
用于表示逻辑值(真 / 假):
| 类型 | 占用字节 | 取值范围 | 用法示例 |
|---|---|---|---|
boolean | 1 字节(或按需优化) | true(真)或 false(假) | boolean isPass = true; |
特点:
- 主要用于条件判断(如
if语句、循环控制),不能直接与整数转换。
基本数据类型的默认值
当基本数据类型作为类的成员变量时,未手动初始化会有默认值:
| 类型 | 默认值 |
|---|---|
byte/short/int | 0 |
long | 0L |
float | 0.0f |
double | 0.0d |
char | '\u0000'(空字符) |
boolean | false |
注意:局部变量(方法内定义的变量)没有默认值,必须手动初始化才能使用。
用法总结
- 选择数据类型时,需平衡范围和内存占用(如小范围整数用
byte比int更省内存)。 - 避免浮点精度问题:如
0.1 + 0.2的结果不是0.3,而是约0.30000000000000004。 - 字符类型可用于存储单个字符或编码值,布尔类型仅用于逻辑判断。
通过合理使用基本数据类型,能提高程序的性能和内存效率。