int 和 Integer 有什么区别?
发布于
一、本质区别
- int 是 Java 的 8 种基本数据类型之一,直接存数值,占 4 字节,默认值 0。
- Integer 是 int 的包装类,是对象,存的是指向堆中对象的引用,默认值 null。
二、自动装箱与拆箱
Integer a = 10; // 自动装箱:Integer.valueOf(10)
int b = a; // 自动拆箱:a.intValue()
三、Integer 缓存
Integer.valueOf() 对 -128~127 的值做了缓存,范围内返回同一对象,超出则 new 新对象:
Integer x = 127, y = 127;
x == y; // true(缓存命中,同一对象)
Integer m = 128, n = 128;
m == n; // false(超出缓存,两个对象)
因此比较 Integer 的值必须用 equals(),不能用 ==。
四、使用建议
- 方法局部变量、循环计数用 int,性能更好。
- 集合泛型、可为 null 的字段用 Integer。
- 数据库数值列映射到实体类时,优先用包装类以区分 null 与 0。