int 和 Integer 有什么区别?

Java 基础面试题发布于

一、本质区别

  • 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。