自动装箱VS自定拆箱

引言:

在Java中,自动装箱(Autoboxing)和自动拆箱(Autounboxing)是Java 5引入的一项特性,用于在基本数据类型和它们的包装类(wrapper classes)之间进行自动转换。这允许程序员在编写代码时更自然地处理基本数据类型和对象类型,而不需要显式地创建包装类的实例或进行类型转换。

1.自动装箱(Autoboxing)

自动装箱是指将基本数据类型自动转换为对应的包装类实例。例如,当你将一个int值赋给一个Integer对象时,Java会自动将int值装箱为Integer对象。

Integer i = 10; // 自动装箱,相当于 Integer i = Integer.valueOf(10);

 

在上面的代码中,虽然我们将一个基本类型int的值(即10)赋给了一个Integer对象i,但Java编译器会自动进行装箱操作,调用Integer.valueOf(int)方法来创建一个Integer对象。

2.自动拆箱(Autounboxing)

自动拆箱是指将包装类实例自动转换为对应的基本数据类型。例如,当你从一个Integer对象中获取int值时,Java会自动拆箱。


	Integer i = 10; 

	int j = i; // 自动拆箱,相当于 int j = i.intValue();

在上面的代码中,我们从一个Integer对象i中获取了一个int值,并将其赋给了基本类型变量j。Java编译器会自动进行拆箱操作,调用Integer对象的intValue()方法来获取int值。

注意事项

  1. 空指针异常:由于自动拆箱涉及到对包装类实例的调用,如果包装类实例为null,那么在自动拆箱时将会抛出NullPointerException。
    Integer i = null; 
    int j = i; // 抛出 NullPointerException,因为i是null

  2. 性能:虽然自动装箱和拆箱使得代码更加简洁,但它们并不是无代价的。包装类和基本数据类型之间的转换需要额外的内存分配和垃圾回收开销。因此,在性能敏感的代码中,应尽量避免不必要的自动装箱和拆箱操作。
  3. 缓存:对于Byte、Short、Integer、Long、Character、Boolean和Float(不包括Double和Void)这些包装类,Java提供了缓存机制来存储一些常用值(通常是-128到127之间的Byte、Short和Integer值,以及Boolean的true和false)。当自动装箱这些范围内的值时,Java会返回缓存中的对象,而不是创建新的对象。这有助于提高性能和减少内存使用。但是,超出这个范围的自动装箱操作仍然会创建新的对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

冷酷无情小美

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

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

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

打赏作者

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

抵扣说明:

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

余额充值