一、为什么需要设计封装类?
面向对象兼容性:Java强调一切皆对象,但基本数据类型(如int、char等)不是对象。为了在需要对象的场景(如集合类、泛型)中使用基本类型,必须将其封装为对象。
Null值支持:封装类可以表示null,适用于数据库字段映射或业务场景中“未赋值”的逻辑。
泛型与反射:泛型类型参数、反射操作(如注解处理)必须使用对象类型。例如:
点击查看代码
public class Box
private T value; // T必须是对象类型
}
Box
Box
二、Integer和int的区别
维度
int(基本类型)
Integer(封装类)
类型性质
基本数据类型
对象类型(java.lang.Integer)
存储位置
栈内存(直接存储值)
堆内存(对象实例),栈中存储引用
默认值
0
null
功能方法
无
提供数值转换、比较等方法
内存占用
4字节
约16字节(对象头+实例数据)
比较操作
==
比较引用时用==,比较值用equals()
三、关键注意事项
1.自动装箱(int→Integer)和拆箱(Integer→int)是编译器语法糖,但频繁操作可能影响性能:
2.缓存机制
Java对-128到127的Integer对象进行了缓存,以提高性能
3.不可变性
Integer对象一旦创建,值不可变。所有修改操作(如++)会生成新对象:
四、总结
封装类的核心目的:弥补基本类型在面向对象、功能扩展和特定场景中的不足。
Integer vs int:
封装类是对象,功能丰富但内存开销大;基本类型轻量高效但功能受限。根据场景合理选择,避免滥用封装类导致性能问题。