包装类、自动拆、装箱

包装类和自动装箱+自动拆箱
包装类:
int i=10;
Integer ii=new Integer(i);
ArrayList<Integer>
自动装箱:只发生在编译期间的魔法
int i=10;
Integer ii=i; =>Integer ii=new Integer(i);
自动拆箱:只发生在编译期间的魔法
Integer jj=new Integer(10);
int j=jj;=>int j=jj.intValue();
int method(){
Integer ii;
return ii;
}
void method1(int i); void method1(new Integer(10));
基本数据类型:
float java.lang.Float
double java.lang.Double
int java.lang.Integer
short java.lang.Short
byte java.lang.Byte
long java.lang.Long
char java.lang.Character
boolean java.lang.Boolean

重点:无论泛型还是自动拆装箱,都是编译期间运行

自动箱(boxing)和自动装箱Java语言设计的一个特性,它允许将基本数据型(如int、char等)隐式转换为对应的包装对象(如Integer、Character等),反之亦然,以支持方法的引用和操作。如果你遇到自动装箱带来的性能问题或者想要控制这种行为,可以采取以下几种策略: 1. **避免频繁箱**:尽量减少基本型和包装之间的转换,特别是循环中的大量操作。例如,在循环内计算可以直接使用基本型的值,避免每次迭代都创建新的包装对象。 ```java for (int i : numbers) { // 直接对i进行操作 } ``` 2. **批量箱**:如果需要处理大量的基本型数据,你可以选择一次性将其全部转换为列表或其他集合,然后遍历操作。 ```java List<Integer> integerList = IntStream.of(numbers).boxed().collect(Collectors.toList()); for (Integer num : integerList) { // 使用num } ``` 3. **使用Java 8的Stream API**:对于流(Stream)处理,流内部会自动优化箱和装箱过程,所以直接使用流可以避免手动管理。 4. **使用`javac`命令的选项**:在编译阶段,你可以通过`-XX:TieredStopAtLevel=1`这样的JVM选项来禁用部分优化级别,包括箱,但这可能会导致其他优化效果降低。 5. **自定义枚举**:如果你的业务场景下有固定的有限种可能性,可以考虑使用枚举替代基本型和包装,这可以避免自动箱。 记得,除非有特定性能需求,一般情况下自动箱和装箱不会成为性能瓶颈,因为现代 JVM 已经做了很多优化。不过了解其原理并合理使用能帮助你编写更高效、清晰的代码。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值