java自动装箱拆箱

因为看到几个很有意思的面试题,关于装箱拆箱的,错得一头雾水<img alt="敲打" src="http://static.blog.csdn.net/xheditor/xheditor_emot/default/knock.gif" />,就想着总结一下经验

首先对于自动装箱拆箱的定义,其实看这个你就明白了

Integer i=100;
被自动转换成
Integer i=Integer.valueOf(100);
就叫做自动装箱。而拆箱呢,比如:
<pre name="code" class="java">Integer i1=1;
Integer i2=2;
int i3=i1+i2;//包装器类型拆成基本数据类型完成算数运算
 

然后进入正题吧

String s1="asdf";
String s2="asdf";
s1==s2;         (true)//除非是new一个String对象,否则只要是像这样隐式装箱,字符串内容相同,返回的都是同一个对象的引用。
s1.equals(s2);  (true)

Integer i1=12;
Integer i2=12;
Integer i3=300;
Integer i4=300;
i1==i2;          (true)
i1.equals(i2);   (true)//仅在数值大于等于-128且小于等于127时,因为这种情况时装箱操作返回的是同一个缓存对象的引用
                       //而超过这个值以后每次返回的是新创建对象的引用,像这样有数据范围区别的基本类型还有Long(-128<=i<=127)
                       //Byte(-128<=i<=127) Short(-128<=i<=127) char(i<=127)(依然强调你不能超过它本身表示数据的范围)
i3==i4;          (false)
i3.equals(i4);   (true)

double float并不存在此种情况,这是由包装器类的valueOf方法决定的
Double d1=12.3;
Double d2=12.3;
d1==d2;          (false)  //无论值是什么都是这种结果 因为他们的valueOf每次都返回的新对象引用
d1.equals(d2);   (true)

Boolean b1=true;
Boolean b2=true;
b1==b2;          (true)
b1.equals(b2);   (true)
Boolean的valueOf方法每次返回的都是缓存对象的引用,从不新建对象,所以地址都是相同的.<img alt="微笑" src="http://static.blog.csdn.net/xheditor/xheditor_emot/default/smile.gif" />


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值