Java中包装类 装箱和拆箱

Java中,数据类型总体可以分为两大类:基本数据类型(值类型)&类类型(数据引用类型)。

基本数据类型的数据不是对象,不能作为对象调用其toString(), hashCode() ,equail(),getClass()等等。

所以Java就专门针对8大基本类型封装了类:

包装类:short Short,byte Byte,int Integer,long Long,double Double,float Filoat,char Char,boolean Boolean。

所谓的装箱:就是把基本类型用他们相应的引用类型包起来,是他们具有对象的特质。如int封装成Integer等

所谓的拆箱:正好和装箱相反,就是把Integer的这种引用类型的对象重新简化为基本类型数据。

知识扩展:

包装类的缓存:
包装类是不可变的,就像String类一样,String类的对象以及创建,便不可改变,所以多个引用指向同一个String对象也不会有什么危险,因此,在编译阶段将String常量置入字符串常量池中,当下次使用时就可以直接从字符串常量池中提取。对于包装类,其对象同样是不可改变的,所以对于某些频繁使用的值,系统提供了包装类的缓存(即预先创建了经常使用的包装类对象,可以参考包装类的valueOf方法),当需要时直接从缓存中提取,而不再创建一个新的包装类对象,这些缓存的包装类的值如下:
boolean的所有值(true和false)
byte的所有值(-128~127)
char值的(0~127)
short值的(-128~127)
int值的(-128~127)
long值的(-128~127)
对于浮点类型的float与double,包装类没有缓存。
对以上的数值进行封箱的时候,并不是创建一个新的对象,而是使用缓存中的对象,这样当重复使用的时候就可以避免重复创建对象造成浪费,因为与String类对象一样,包装类对象时不可变的,因此使用多个引用指向一个包装类时也不会有什么影响。
所以, character c1=127; character c2=127;不论是“equal”还是“==”c1和c2的运算结果都是true.
character c3=128; character c4=128;c3和c4的“equal”运算时true,“==”运算时false。

Interger i1= new Integer(20);
Interger i2= new Integer(20);
System.out.println(i1==i2); 结果是false而不是true;请仔细体会之。

 



参考文献地址:http://hi.baidu.com/smilehaha/item/

              http://changwu0101.blog.163.com/blog/static/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值