最直接区分是能否为null、进集合、调用方法:基本类型不行,包装类型可以;前者用小写关键字声明赋值,后者是首字母大写的类,可null、可自动装箱、有工具方法。

Java 中基本数据类型和包装类型最直接的区分方式,是看它能不能为 null、能不能放进集合、有没有方法可用——前者不行,后者可以。
看声明方式和赋值行为
基本数据类型用小写关键字直接声明,不加 new,也不能赋 null:
-
int age = 25;合法;int age = null;编译报错 -
boolean flag = true;合法;boolean flag = null;不允许
包装类型是类,首字母大写,可为 null,支持 new 或自动装箱:
-
Integer age = 25;(自动装箱)或Integer age = new Integer(25); -
Boolean flag = null;完全合法,常用于数据库字段映射
看内存和默认值
基本类型变量在栈中存实际数值,成员变量有默认值(如 int 默认 0,boolean 默认 false);包装类型变量在栈中存引用,对象本身在堆中,成员变量默认值为 null。
立即学习“Java免费学习笔记(深入)”;
- 局部变量未显式赋值:基本类型会编译报错;包装类型可声明不赋值,后续为
null - 类中字段:基本类型自动初始化;包装类型保持
null,直到你主动赋值
看使用场景是否受限
基本类型不能用于泛型、集合、反射调用等需要对象的地方;包装类型可以:
-
List<int>编译失败;List<Integer>正确 -
Map<String, Boolean>合法;Map<String, boolean>不合法 -
Integer.parseInt("123")有工具方法;int本身没有方法
看比较和运算时的行为差异
基本类型用 == 比较值;包装类型用 == 比较的是引用地址(除非在缓存范围内),推荐统一用 equals():
-
Integer a = 100, b = 100;→a == b为true(-128 ~ 127 缓存) -
Integer c = 200, d = 200;→c == d为false,但c.equals(d)为true - 拆箱时若对象为
null,如int x = nullInteger;,运行时报NullPointerException


















