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年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》