int和Integer有什么区别?

int和Integer的区别,一般会涉及到如下7大区别:

1. 数据类型的区别

  • int:是一种基本数据类型,直接存储数值;
  • Integer:包装类,属于引用类型。

2. 存储位置的区别

int:存储在栈(stack)中,Integer:存储在堆(heap)中,引用存储在栈中。

int和Integer有什么区别?-mikechen

3.占用大小的区别

int是4个字节,Integer在32位占用16个字节。

Integer 是一个包装类,封装了一个 int 类型的值,在内存中,一个 Integer 对象包含以下部分:

  1. 对象头:包括 Mark WordClass Pointer
  2. 实例数据:实际存储的 int 值。
  3. 对齐填充:对象实例数据部分没有对齐的话,就需要通过对齐填充来补全。

Mark Word:通常占用 32 或 64 位,取决于 JVM 是否为 32 位或 64 位,它用于存储对象的哈希码、GC 状态、锁信息等。

int和Integer有什么区别?-mikechen

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年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复面试即可获取《史上最全阿里Java面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法