1. 基本类型与包装类
int
是基本数据类型,存储数值本身Integer
是对象类型(包装类),存储对象引用- 默认值差异:int默认值为
0
0
0,Integer默认值为
null
2. 自动装箱与拆箱机制
Integer a = 10; // 自动装箱(底层调用Integer.valueOf(10))
int b = a; // 自动拆箱(底层调用a.intValue())
3. 内存分配差异
int
直接存储数值:int num = 42; // 直接存储在栈内存
Integer
对象存储:Integer obj = new Integer(42); // 对象存储在堆内存,引用存在栈内存
4. 典型使用场景对比
场景 | int适用场景 | Integer适用场景 |
---|---|---|
集合框架 | 不可用 | List<Integer> |
数据库映射 | 不可用 | 可表示NULL值 |
泛型编程 | 不可用 | 必须使用包装类 |
简单数值计算 | 性能更优 | 需要对象操作时使用 |
5. 特殊注意事项
- 对象比较:应使用
equals()
方法而非==
Integer x = 128;
Integer y = 128;
System.out.println(x == y); // 输出false(超出缓存范围)
- 缓存机制:-128~127的Integer对象会被JVM缓存
Integer a = 127;
Integer b = 127;
System.out.println(a == b); // 输出true
建议在以下情况优先使用int:
- 高频次数值计算
- 内存敏感场景
- 不需要null表示的场合
以下情况必须使用Integer:
- 集合框架中的元素存储
- 需要表示数值缺失(null)
- 反射API操作
- 泛型参数类型声明