一、基本数据类型(Primitive Data Types)
Java 定义了 8 种基本数据类型,它们直接存储数据值,不需要实例化对象。分为以下四类:
1. 整数类型
类型 | 大小(字节) | 取值范围 | 默认值 | 示例 |
---|---|---|---|---|
byte | 1 | -128 ~ 127 | 0 | byte b = 10 |
short | 2 | -32768 ~ 32767 | 0 | short s = 100 |
int | 4 | -2³¹ ~ 2³¹-1(约±21亿) | 0 | int i = 1000 |
long | 8 | -2⁶³ ~ 2⁶³-1 | 0L | long l = 1000000L |
注意:
• long
类型赋值时建议加上 L
后缀(如 100L
),否则会被视为 int
。
• 整数运算默认使用 int
类型,如 byte
或 short
参与运算时会自动提升为 int
。
2. 浮点类型
类型 | 大小(字节) | 精度 | 默认值 | 示例 |
---|---|---|---|---|
float | 4 | 6~7位有效小数 | 0.0f | float f = 3.14f |
double | 8 | 15位有效小数 | 0.0d | double d = 3.14 |
注意:
• float
赋值时必须加上 f
或 F
后缀,否则会被视为 double
。
• 浮点数存在精度丢失问题,如 0.1 + 0.2 ≠ 0.3
(需用 BigDecimal
处理高精度计算)。
3. 字符类型
类型 | 大小(字节) | 取值范围 | 默认值 | 示例 |
---|---|---|---|---|
char | 2 | Unicode字符(0 ~ 65535) | ‘\u0000’ | char c = 'A' |
特点:
• 使用单引号 ''
赋值。
• 可表示转义字符(如 \n
、\t
)或 Unicode(如 '\u0041'
表示 A
)。
4. 布尔类型
类型 | 大小(字节) | 取值范围 | 默认值 | 示例 |
---|---|---|---|---|
boolean | 未明确定义 | true/false | false | boolean b = true |
注意:
• Java 中 boolean
不能与整数类型(如 0
或 1
)互换。
二、引用数据类型(Reference Data Types)
引用数据类型存储的是对象的引用(内存地址),而非实际值。包括以下类型:
1. 类(Class)
• 如 String
、自定义类(如 Person
)等。
• 示例:
String str = "Hello"; // str 存储的是字符串对象的引用
2. 接口(Interface)
• 如 List
、Map
等。
• 示例:
List<Integer> list = new ArrayList<>();
3. 数组(Array)
• 可以是基本类型或引用类型的数组。
• 示例:
int[] arr = {1, 2, 3}; // 基本类型数组
String[] names = new String[5]; // 引用类型数组
4. 枚举(Enum)
• 预定义常量的集合。
• 示例:
enum Color { RED, GREEN, BLUE }
Color color = Color.RED;
三、基本类型 vs 引用类型
特性 | 基本类型 | 引用类型 |
---|---|---|
存储内容 | 直接存储数据值 | 存储对象的内存地址 |
内存分配 | 栈(Stack) | 堆(Heap),栈中存储引用地址 |
默认值 | 有默认值(如 0 、0.0f 等) | 默认值为 null |
传递方式 | 按值传递(复制值) | 按引用传递(复制地址) |
内存占用 | 固定大小(如 int 占4字节) | 大小不固定,取决于对象 |
四、自动装箱与拆箱(Autoboxing/Unboxing)
Java 5+ 支持基本类型与对应包装类的自动转换:
• 装箱(Boxing):基本类型 → 包装类(如 int
→ Integer
)。
• 拆箱(Unboxing):包装类 → 基本类型(如 Integer
→ int
)。
示例:
Integer num = 10; // 自动装箱:等价于 Integer.valueOf(10)
int n = num; // 自动拆箱:等价于 num.intValue()
五、注意事项
-
类型转换:
• 小范围类型 → 大范围类型:自动转换(如int
→double
)。
• 大范围类型 → 小范围类型:需强制转换(可能丢失精度)。double d = 3.14; int i = (int) d; // i = 3
-
字符串与基本类型转换:
// String → 基本类型 int num = Integer.parseInt("123"); // 基本类型 → String String s = String.valueOf(123);
-
特殊值处理:
•float
和double
支持特殊值(如NaN
、Infinity
)。
• 引用类型需处理null
值,避免NullPointerException
。