选基本类型还是引用类型取决于场景:需独立副本、高性能或无行为时用基本类型;需共享状态、方法调用、null语义或多态时用引用类型。

选基本类型还是引用类型,关键看你要存的是“值本身”还是“可变的、有行为的对象”。不是越高级越好,也不是越简单越优,而是匹配场景。
看数据是否需要独立副本
如果多个地方要各自修改互不影响,比如计数器、状态标志、坐标点,用基本类型更安全。赋值就是复制一份新值,改一个不影响另一个。
- 适合基本类型:int count = 0; boolean isActive = true; char grade = 'A';
- 不适合基本类型:想让两个变量共享同一份用户信息并同步更新——这时必须用引用类型,比如 User user1 = new User(); User user2 = user1;
看内存与性能要求
高频操作、大量小对象(如游戏帧数据、传感器采样)、嵌入式或资源受限环境,优先用基本类型。它们栈上分配、无 GC 压力、访问快。
- 数组用 int[] 比 Integer[] 节省内存且更快;循环中反复读写 long 变量比 Long 对象稳定。
- 但别为了省一点内存强行拆解逻辑——比如把日期拆成 year/month/day 三个 int,反而增加维护成本和出错可能。
看是否需要方法、继承或空值语义
基本类型不能调用方法、不能为 null、不支持多态。需要字符串处理、集合操作、自定义行为时,只能选引用类型。
- String s = "hello"; s.toUpperCase() —— 这个功能基本类型做不到。
- ArrayList
list = new ArrayList(); —— 泛型容器必须用引用类型(哪怕装的是基本类型包装类)。 - 允许“不存在”的语义?比如数据库字段可能为空,用 Integer 而非 int,靠 null 表达缺失值。
注意自动装箱/拆箱带来的隐含成本
Integer、Boolean 等包装类是引用类型,但常被当作基本类型用。频繁在 int ↔ Integer 间转换会创建临时对象,触发 GC,尤其在循环里很危险。
- 避免:for (Integer i = 0; i
- 推荐:用基本类型做循环变量,仅在必要时(如放入集合、调用泛型方法)才转包装类。
- 比较时也小心:Integer a = 127, b = 127; System.out.println(a == b); // true(缓存);Integer c = 128, d = 128; System.out.println(c == d); // false(新建对象)。

















