java自动装箱和拆箱

							**自动装箱和拆箱**

今天我们来说一下装箱和拆箱。我们都知道java中有一句话,那就是“万物皆对象”,所以,8种基本数据类型分别对应了他的包装类; byte—Byte; char—Character; short—Short int—Integer; long— Long; boolean— Boolean; double—Double; float—Float;
首先我们搞清楚两个概念:
自动装箱:把一个基本数据类型的值赋给其他包装类
这就是自动装箱
自动拆箱:就是把一个包装类型的数据赋值给基本数据类型
自动拆箱
其实,以上两句代码,编译器会对他进行处理。编译器会进行如下操作;
Integer i = Integer.valueOf(12);
int p = i.intValue();
目的:就是为了方便基本数据类型和对应的包装类型之间转换。
自动装箱和拆箱看起来非常简单,也很容易理解,但是在使用过程中,尤其是在自动装箱后,在两个对象之间使用“ == ”运算符比较时,其结果我们应该多注意。
下面我们来看例子:
public static void main(String[] args) {
Integer age1 = 23;
System.out.println(“过年了,年龄又增长了一岁,现在的年龄是”+(age1+1));
Integer age2 =23;
System.out.println("age1 == age2 "+(age1 == age2));
age1 = 323;
age2 = 323;
System.out.println("age1 == age2 "+( age1 == age2));
System.out.println("aage1.equals(age2) "+(age1.equals(age2)));
}
执行结果:
程序执行结果
是不是感觉到有点不可思议了,这是因为所有的包装类在执行“ == ”运算符时,都会将包装类型转换为基本数据类型,这是编译器自动完成的。其次,valueOf()方法,对部分经常使用的数据采用缓冲技术,也就是在未使用的时候,这些对象就创建并缓冲着,需要的时候,不需要重新创建,只需要从缓冲中直接调出来使用即可。java当中Byte,Short,Integer,Long,Character这些包装类都有缓冲,他们的值都在-128~+127之间,超出这个区间,就会重新创建对象
所以,这下就解释通了,第一个是24的原因:因为包装类在执行的时候会被自动转换为基本数据类型。第二个返回值为“true ”,因为部分包装类采用了缓冲技术,所以为true 。第三个为什么返回为false,是因为,虽然部分包装类采用了缓冲技术,但是范围是-128~ +127,超出这个范围,就会重新创建对象。最后有返回一个true,是因为equals方法比较的是两个值,只要值相等,就返回true。
最后给大家呈现上一道面试题:
下面为true的是
Integer i = 42;
Long l = 42l;
Double d = 42.0;
A. (i == l ) B. (i == d) C. (l == d) D. i.equals(d)
E. d.equals(l) F. i.equals(l) G. l.equals(42L)
正确答案是:G
总结一下规律:
1、基本数据类型和包装类型进行“ == ”运算符的比较,包装类型将会自动拆箱变为基本数据类型后再进行比较,因此Integer()会自动拆箱为int类型再进行比较,显然返回true;
int a = 220;
Integer b = 220;
System.out.println(a==b);//true
2、两个包装类型进行equals()比较,首先equals()会比较类型,如果类型相同,则继续比较值,如果值也相同,返回true。
Integer a=1;
Integer b=2;
Integer c=3;
System.out.println(c.equals(a+b));//true
3、包装类型调用equals(),但是参数是基本数据类型,这时候,先会进行自动装箱,基本型转换为其封装类型,再进行3中的比较
int i=1;
int j = 2;
Integer c=3;
System.out.println(c.equals(i+j));//true

今天的分享就到这里了,欢迎各位批评指正……

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值