Java 数据类型完整详解(2026 版)
Java 的数据类型分为两大类:基本数据类型(Primitive Types) 和 引用数据类型(Reference Types)。
1. 基本数据类型(8 种)
| 类型 | 字节数 | 取值范围 | 默认值 | 说明 |
|---|---|---|---|---|
| byte | 1 | -128 ~ 127 | 0 | 字节型 |
| short | 2 | -32768 ~ 32767 | 0 | 短整型 |
| int | 4 | -2^31 ~ 2^31-1(约21亿) | 0 | 整型(最常用) |
| long | 8 | -2^63 ~ 2^63-1 | 0L | 长整型 |
| float | 4 | ±1.4E-45 ~ ±3.4028235E38 | 0.0f | 单精度浮点 |
| double | 8 | ±4.9E-324 ~ ±1.7976931348623157E308 | 0.0 | 双精度浮点(默认) |
| char | 2 | 0 ~ 65535(Unicode) | ‘\u0000’ | 字符型 |
| boolean | – | true / false | false | 布尔型 |
代码示例:
public class DataTypeDemo {
public static void main(String[] args) {
// 整数类型
byte b = 127;
short s = 32767;
int i = 100;
long l = 10000000000L; // 必须加 L 或 l
// 浮点类型
float f = 3.14f; // 必须加 F 或 f
double d = 3.141592653589793;
// 字符类型
char c1 = 'A';
char c2 = '中'; // 支持 Unicode
char c3 = '\u0041'; // Unicode 编码
// 布尔类型
boolean flag = true;
}
}
2. 引用数据类型
所有使用 new 关键字创建的对象都是引用类型,包括:
- 类(Class):如
String、Scanner、ArrayList - 接口(Interface)
- 数组(Array)
- 枚举(Enum)
- 注解(Annotation)
核心区别:
- 基本类型:存储实际值,存放在栈中
- 引用类型:存储对象的地址(引用),对象本体存放在堆中
String str1 = "Hello"; // 字符串常量池
String str2 = new String("Hello");
int[] arr = new int[10]; // 数组是引用类型
3. 自动装箱与拆箱(Autoboxing & Unboxing)
从 Java 5 开始支持:
Integer num1 = 100; // 自动装箱:int → Integer
int num2 = num1; // 自动拆箱:Integer → int
// 底层相当于
Integer num1 = Integer.valueOf(100);
int num2 = num1.intValue();
注意:Integer 缓存了 -128 ~ 127 的对象,使用 == 比较时在此范围内结果为 true。
4. 类型转换
4.1 自动类型转换(隐式转换)
从小范围到大范围:
byte b = 10;
int i = b; // 自动转换
long l = i;
double d = l;
4.2 强制类型转换(显式转换)
double d = 3.14159;
int i = (int) d; // 结果为 3(直接截断小数)
long l = 3000000000L;
int n = (int) l; // 可能造成数据溢出
5. 常见陷阱与最佳实践
1. 整数溢出
int max = Integer.MAX_VALUE;
System.out.println(max + 1); // -2147483648(溢出)
推荐:使用 long 或 BigInteger
2. 浮点数精度问题
double a = 0.1;
double b = 0.2;
System.out.println(a + b); // 0.30000000000000004
推荐:金融计算使用 BigDecimal
3. char 类型本质是整数
char c = 'A';
System.out.println(c + 1); // 输出 66(Unicode 值)
4. 变量命名与默认值
- 成员变量有默认值
- 局部变量必须手动初始化
6. 包装类型 vs 基本类型
| 场景 | 推荐使用 |
|---|---|
| 普通计算、性能敏感 | 基本类型 |
| 集合(List、Map) | 包装类型 |
| 泛型 | 包装类型 |
| 需要 null 值 | 包装类型 |
总结记忆口诀:
基本八种记心里:
byte short int long、float double、char boolean
引用类型 new 出来,String是最常用
装箱拆箱自动换,精度范围要记清
练习题(建议立即动手):
- 写一个方法,判断一个
int是否是 2 的整数次幂(使用位运算) - 使用
BigDecimal实现精确的金额加法 - 演示
Integer缓存机制对==的影响
需要我继续讲解以下哪个专题?
- String 详解(常量池、不可变性)
- 数组与集合
- BigDecimal 与 BigInteger
- Java 内存模型与数据类型的关系
随时告诉我!