01 java基本类型和包装类型的区别?
基本类型和包装类型的区别?
1 包装类型可以为 null,而基本类型不可以
数据库的查询结果可能是
null
,如果使用基本类型的话,因为要自动拆箱(将包装类型转为基本类型,比如说把 Integer 对象转换成 int 值),就会抛出NullPointerException
的异常。
int i1 = null;// 模拟数据库查询出来的数据
Integer i2 = null;// 模拟数据库查询出来的数据
2 包装类型可用于泛型
,而基本类型不可以。
泛型不能使用基本类型,因为使用基本类型时会编译出错。
List<int> list = new ArrayList<>(); // 提示 Syntax error, insert "Dimensions" to complete ReferenceType
List<Integer> list = new ArrayList<>();
为什么呢?因为泛型在编译时会进行类型擦除,最后只保留原始类型,而原始类型只能是 Object 类及其子类——基本类型是个特例。
3 虚拟机中存放位置的不同
- 基本数据类型的
局部变量
存放在 Java 虚拟机栈中
的局部变量
表中基本数据类型
的成员变量
(未被static
修饰 )存放在 Java 虚拟机的堆中
包装类型
属于对象
类型,我们知道几乎所有对象实例都存在于堆中
。
⚠️注意 : 基本数据类型存放在栈中是一个常见的误区! 基本数据类型的成员变量如果没有被 static
修饰的话(不建议这么使用,应该要使用基本数据类型对应的包装类型),就存放在堆中。会产生异常
class BasicTypeVar{
private int x;
}
4 基本类型比包装类型更高效
- 包装类属于对象类型占用空间大, 基本数据类型占用的空间非常小。(等同于效率高)
- 包装类型为了提升效率 添加了缓存机制
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix