Java包装类(wrapper)

定义:

Java语言是面向对象的语言,而基本数据类型的值不是对象。有时候将简单数据类型的数据进行封装,从而得到的类,就是包装类。
在这里插入图片描述
以上就是基本数据类型与之对应的包装类。

包装类的作用:

1、包装类是final修饰的,不能被继承。
2、包装类是不可变类,在构造包装类对象后,不允许更改包装在其中的值。
3、方便在基本数据类型与字符串之间进行转换。
4、可以更加便捷的对基本数据类型进行操作。
5、方便在集合中的存储。

包装类常用方法

在这里插入图片描述

包装类拆装箱:

装箱:将基本数据类型封装成包装类对象
拆箱:将包装类对象转换为基本数据类型
在这里插入图片描述
JDK1.5 之后可以自动拆箱装箱,也就是在进行基本数据类型和对应的包装类转换时,系统将自动进行,方便了代码的书写。

包装类中常量池:

常量池:
当包装类进行自动装箱操作时,装箱后的对象会存储在一个缓存区中,并且只能存储有且只有一个相同值的对象。这个缓存区就是包装类常量池

包装类Byte,Short,Integer,Long对应的常量池的范围是:-128~127
浮点数对应的包装类没有常量池
字符类型的包装类Character的常量池的范围:0~127
布尔类型的包装类Boolean的常量池就两个值:rue和false
在这里插入图片描述

在这里插入图片描述
Integer已经默认创建了数值 [-128-127] 的Integer缓存数据。
Integer i1=40时,JVM会直接在对象池中找到该值的引用。也就是说这种方式声明一个Integer对象时,JVM首先会在Integer对象的常量池中查找有没有值为40的对象,如果有则直接返回该对象的引用;如果没有,则新创建一个对象,并返回该对象的引用地址。

因为Java中 “= =” 比较的是两个对象是否是同一个引用(即比较内存地址),因此,根据包装类常量池,i1和i2都是引用的同一个对象,所以 i1==i2 结果为”true“;而使用new方式创建的i4=new Integer(40)、i5=new Integer(40),虽然他们的值相等,但是每次都会重新创建新的Integer对象,不会被放入到对象池中,所以他们不是同一个引用,输出"false"。

对于i1==i2+i3,i4 ==i5+i6结果为True,是因为,Java的数学计算是在内存栈里操作的,Java会对i5、i6进行拆箱操作,其实比较的是基本类型的数值之间的计算,所以他们的值相同,因此结果为"true"。

对于i7==i8返回"false",是因为Integer对应的常量池的范围是:-128~127,超过范围,所以新创建了对象

包装类与基本数据类型的区别:

基本类型存储在堆里,包装类型存储在栈里。因为栈的效率更高,所以保留了基本类型。
包装类是对象,拥有方法和字段,对象的调用是引用对象的地址。
基本类型是值传递,包装类是引用传递。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值