int和Integer的区别,一般会涉及到如下7大区别:
1. 数据类型的区别
- int:是一种基本数据类型,直接存储数值;
- Integer:包装类,属于引用类型。
2. 存储位置的区别
int:存储在栈(stack)中,Integer:存储在堆(heap)中,引用存储在栈中。

3.占用大小的区别
int是4个字节,Integer在32位占用16个字节。
Integer 是一个包装类,封装了一个 int 类型的值,在内存中,一个 Integer 对象包含以下部分:
- 对象头:包括
Mark Word和Class Pointer。 - 实例数据:实际存储的
int值。 - 对齐填充:对象实例数据部分没有对齐的话,就需要通过对齐填充来补全。
Mark Word:通常占用 32 或 64 位,取决于 JVM 是否为 32 位或 64 位,它用于存储对象的哈希码、GC 状态、锁信息等。

Class Pointer:指向类元数据,Java 的 Integer 对象指向 java.lang.Integer 类。
实例数据:Integer 对象包含一个 int 类型字段 value,用于存储实际的整数值。
对齐填充:填充部分仅起到占位符的作用, 原因是HotSpot要求对象起始地址必须是8字节的整数倍。
所以,Integer在int的基础上多包装了:对象头和对齐填充,所以占用的字节数大于int基本数据类型。
4. 默认值的区别
int:默认值是 0,Integer:默认值是 null。
5. 性能的区别
int:操作速度快,性能更高,因为直接操作的是基本类型。
Integer:操作速度相对较慢,需要进行拆箱(unboxing)和装箱(boxing)操作。
6. 使用场景的区别
int:适用于需要高效存储和操作数值的场景,例如:循环计数器、数值计算等。
Integer:适用于需要使用对象特性的场景,例如与集合类(如 ArrayList, HashMap)一起使用,因为集合类只能存储对象。
7. 比较方式的区别
int:使用 == 进行值比较。
Integer:使用 == 比较引用(对象地址),使用 equals() 方法进行值比较。
mikechen睿哥
10年+一线大厂架构实战专家,就职于阿里、淘宝等一线大厂,操盘多个亿级大厂核心项目。