Integer
- Integer是int对应的包装类,其中有一个private final int value;来存储数据,并且还提供了一些基本操作,例如sum、max、int和字符串的转换等方法。从value声明为private final可以得知它也是一个不可变类型!
备注:
1)int与integer的区别?
所占内存 | 类型 | 初始值 | |
Int | 占用的空间更少 | 基本类型,直接存数值 | 0 |
Integer | 占用更多的内存。Integer是一个对象,需要存储对象的元数据。 | 对象 (Integer是int的封装类) | null |
注:int和Integer都可以表示某一个数值,但int和Integer不能够互用,因为他们两种不同的数据类型;
2)为啥有了基本类型还需要包装类
2-1)面向对象特性的需求
-
对象化的操作:Java是面向对象的语言,但基本类型(如
int
、char
)不是对象,无法直接参与面向对象的操作(如多态、泛型、集合存储)。包装类(如Integer
、Character
)将基本类型封装成对象,使其能融入面向对象的体系中。 -
方法的支持:包装类提供了丰富的方法(如类型转换、数值比较、进制转换等),例如
Integer.parseInt()
、Double.toString()
,这些方法增强了基本类型的功能。
2-2)泛型与集合框架的支持
-
泛型需要对象类型:Java的泛型(如
List<T>
、Map<K, V>
)要求类型参数必须是对象类型,而基本类型无法直接使用。例如,List<Integer>
可以存储Integer
对象,但List<int>
是非法的。 -
集合存储:
ArrayList
、HashMap
等集合类只能存储对象,不能存储基本类型。包装类作为对象,可以无缝与集合框架结合。
2-3)允许null
值
-
表示缺失值:包装类可以赋值为
null
,用于表示数据缺失或未初始化的情况(如数据库查询结果中的NULL
字段)。而基本类型必须有一个默认值(如int
默认是0
),这在某些场景下可能引发歧义。
3)Int和Integer装箱时怎么实现的?
自动装箱机制,具体是int到Integer的转换过程。
编译器自动转换。当代码中需要将 int
赋值给 Integer
时,编译器会自动插入 Integer.valueOf()
方法,而不是直接调用 new Integer()
构造函数。
我还需要解释拆箱的过程,也就是Integer到int的转换,使用intValue()方法。
更多java基础总结(适合于java基础学习、java面试常规题):
总结篇(9)---字符串及基本类 (1)字符串及基本类之基本数据类型
总结篇(10)---字符串及基本类 (2)字符串及基本类之java中公共方法及操作
总结篇(12)---字符串及基本类 (4)Integer对象
总结篇(14)---JVM(java虚拟机) (1)JVM虚拟机概括
总结篇(15)---JVM(java虚拟机) (2)类加载器
总结篇(16)---JVM(java虚拟机) (3)运行时数据区
总结篇(17)---JVM(java虚拟机) (4)垃圾回收
总结篇(18)---JVM(java虚拟机) (5)垃圾回收算法
总结篇(19)---JVM(java虚拟机) (6)JVM调优
总结篇(24)---Java线程及其相关(2)多线程及其问题
总结篇(25)---Java线程及其相关(3)线程池及其问题
总结篇(26)---Java线程及其相关(4)ThreadLocal
总结篇(27)---Java并发及锁(1)Synchronized
总结篇(31)---JUC工具类(1)CountDownLatch