Java 的基本数据类型分为四大类,共 8 种:
| 类型 | 位数 | 范围 | 默认值 | 存储需求 |
byte |
8 |
-128 ~ 127 |
0 |
1 字节 |
short |
16 |
-32,768 ~ 32,767 |
0 |
2 字节 |
int |
32 |
-2,147,483,648 ~ 2,147,483,647 |
0 |
4 字节 |
long |
64 |
-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 |
0L |
8 字节 |
存储示例:
| 类型 | 位数 | 精度 | 默认值 | 存储需求 |
float |
32 |
单精度,约 6-7 位小数 |
0.0f |
4 字节 |
double |
64 |
双精度,约 15 位小数 |
0.0d |
8 字节 |
存储示例:
| 类型 | 位数 | 范围 | 默认值 | 存储需求 |
char |
16 |
0 ~ 65,535 (Unicode) |
'\u0000' |
2 字节 |
存储示例:
| 类型 | 位数 | 取值 | 默认值 | 存储需求 |
boolean |
未明确 |
true 或 false |
false |
未明确(通常 1 字节) |
存储示例:
boolean isTrue = true;
boolean flag = 5 > 3;
Java 为每个基本数据类型提供了对应的包装类,支持自动装箱(Primitive → Wrapper)和拆箱(Wrapper → Primitive):
| 基本类型 | 包装类 |
byte |
Byte |
short |
Short |
int |
Integer |
long |
Long |
float |
Float |
double |
Double |
char |
Character |
boolean |
Boolean |
部分包装类(如 Integer)实现了对象缓存:
int i = 200;
byte b = (byte) i;
表达式中,操作数会自动提升为最大操作数的类型:
byte a = 10;
short b = 20;
int result = a + b;
- 性能:基本类型(如
int)直接存储值,无对象开销,运算效率高;包装类(如 Integer)涉及对象创建与垃圾回收,性能较低。
- 内存:基本类型占用固定内存(如
int 占 4 字节),包装类需额外对象头(约 12-16 字节)。
适用场景:
- 频繁运算(如循环计数器)用基本类型。
- 集合框架(如
List<Integer>)必须用包装类。
double num = 1234.5678;
String formatted = String.format("%.2f", num);
String text = "你好";
byte[] utf8Bytes = text.getBytes("UTF-8");
-
浮点精度问题:
double a = 0.1;
double b = 0.2;
System.out.println(a + b);
解决方案:使用 BigDecimal 处理精确计算。
-
整数溢出:
int max = Integer.MAX_VALUE;
System.out.println(max + 1);
解决方案:使用 long 类型或 Math.addExact() 检查溢出。
-
布尔类型非 0/1:
Java 的 boolean 只能是 true 或 false,不可用 0/1 替代(与 C/C++ 不同)。