用了这么久Java,您知道什么是装箱和拆箱吗?

114 篇文章 11 订阅
65 篇文章 1 订阅

Java中的装箱和拆箱

在Java中,装箱(Boxing)和拆箱(Unboxing)是自动类型转换过程,它们涉及到基本数据类型(如int、double、char等)和它们对应的包装类(如Integer、Double、Character等)之间的转换。这种机制是从Java 5(也称为Java 1.5)开始引入的,主要目的是为了支持泛型编程,因为Java的泛型在编译时会被类型擦除,而基本数据类型不能被泛型化,只能使用它们的包装类。

当你将一个基本数据类型赋值给一个包装类类型的变量时,这个过程称为装箱(boxing)。

相反,从包装类类型转换回基本数据类型的过程称为拆箱(unboxing)。

自动装箱

装箱是将基本数据类型转换为对应的包装类对象的过程。例如,将int转换为Integerdouble转换为Double等。这个过程是自动的,但背后实际上是调用了包装类的构造方法或valueOf()静态方法来创建对象

int num = 10;  
Integer numObj = num; // 自动装箱,等同于 Integer numObj = Integer.valueOf(num);

在上面的例子中,num是一个基本数据类型int,它被自动装箱为Integer类型的对象numObj

自动拆箱

拆箱是装箱的逆过程,即将包装类对象转换回基本数据类型。这个过程也是自动的,但实际上是调用了包装类对象的xxxValue()方法(尽管在大多数情况下,Java编译器会优化这个调用)。

Integer numObj = 10;  
int num = numObj; // 自动拆箱,等同于 int num = numObj.intValue();

在上面的例子中,​numObj是一个Integer对象,它被自动拆箱为int类型的值num。

不必要的装箱或拆箱容易产生性能问题

虽然装箱和拆箱是自动进行的,但它们涉及到对象的创建和销毁(对于装箱)以及类型转换(对于拆箱),因此在性能敏感的代码区域(如循环内部)应该避免不必要的装箱和拆箱操作。

例如下面的代码 就没有必要进行先装箱后拆箱的操作

String str = "123";

Integer num = Integer.parseInt(str); // 装箱

int result = num + 1; // 拆箱

建议的写法如下

String str = "123";

int num = Integer.parseInt(str); // 直接解析为 int,避免装箱和拆箱

int result = num + 1;

我的每一篇文章都希望帮助读者解决实际工作中遇到的问题!如果文章帮到了您,劳烦点赞、收藏、转发!您的鼓励是我不断更新文章最大的动力!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

测试开发Kevin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值