java基本类型是值类型、不可为null、不能用于集合和泛型;包装类型是引用类型、可为null、必须用于集合和泛型。基本类型如int,包装类型如integer;前者默认值为0,后者为null;比较应使用objects.equals()避免缓存陷阱。

区分 Java 基本数据类型和包装类型,关键看三点:是不是对象、能不能为 null、用不用在集合或泛型里。基本类型是“值本身”,包装类型是“装着值的对象”。
看声明方式和本质
基本类型直接写小写关键字,比如 int、boolean、char;包装类型是类,首字母大写,比如 Integer、Boolean、Character。
前者不是对象,不继承 Object;后者是真正的类,属于引用类型,能调用方法(如 intValue()、toString())、有 hashCode()、能参与多态。
看默认值和空值支持
成员变量中:
• int age; 默认是 0
• Integer age; 默认是 null
局部变量必须显式初始化,但这个差异在 POJO 或数据库映射中特别重要——比如查询结果可能为 null,用 int 会因自动拆箱抛出 NullPointerException,而 Integer 可安全持有 null。
看使用场景限制
这些地方只能用包装类型:
• 集合类: List<integer></integer> 合法,List<int></int> 编译报错
• 泛型:所有泛型参数必须是引用类型,Map<string boolean></string> 可以,Map<string boolean></string> 不行
• 方法返回或参数需表达“缺失”语义:比如接口设计中返回 Optional<integer></integer> 或允许 null 的状态标识
看比较和内存行为
• == 比较:
- int a = 5; int b = 5; → a == b 比的是数值,结果为 true
- Integer x = 5; Integer y = 5; → x == y 在 -128~127 范围内可能为 true(走缓存),超出范围就是 false(不同对象)
• 推荐统一用 Objects.equals(x, y) 避免陷阱
• 内存位置:
- 基本类型存在栈上,轻量高效
- 包装类型实例在堆上,栈里只存引用,有额外开销
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











