首页 > 编程语言 > 详细

什么是Java的自动拆箱和自动装箱

时间:2021-03-17 10:02:39      阅读:23      评论:0      收藏:0      [点我收藏+]

自动拆箱和自动装箱是jdk1.5推出的特性。

 

那么,什么是自动拆箱和自动装箱呢?

 

先看例子:

Integer i1 = new Integer(10);
Integer i2 = new Integer(20);

System.out.println(i1);
System.out.println(i2);

这里输出的分别是对应的10和20

 

Integer i3 = 10;
Integer i4 = 20;

System.out.println(i3);
System.out.println(i4);

这里输出的也是10和20

 

其实自动装箱,就是自动将基本数据类型转换为包装器类型,即java会自动帮我们调用valueof方法。

 

拆箱则是自动将包装器类型装换成基本数据类型,但要强调的是拆箱调用的是Integer的intValue方法。

 

那Integer i = new Integer(1)和Integer i = 1有什么区别呢?

 1.第一种方法不会触发自动装箱的过程;而第二种方法会触发

 2.在执行资源和资源占用上的区别。第二种方法的执行效率和资源占用在一般情况下要优于第一种情况(但要注意这并不是绝对的,因为如果刚好调用了内存里面已经存在的同一个资源的话,那么它会直接从缓存区里面拿出来,而不会去新开内存)

 

在这里要注意的一点就是,当装箱的值超过规定范围(-127~128)时,它不会从缓存区拿出缓存好的对象,而是要新开一个,所以会导致以下代码输出不一致的问题:

Integer i1 = 100;
Integer i2 = 100;
Integer i3 = 200;
Integer i4 = 200;
System.out.println(i1==i2);  //true
System.out.println(i3==i4);  //false
//这里i3和i4会创建两个不同的对象,因为超出范围了

 

技术分享图片

 

什么是Java的自动拆箱和自动装箱

原文:https://www.cnblogs.com/MyNorth/p/14547221.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!