包装类总结

一、了解包装类

(1)在java5中增添了两个新特性,自动装箱和拆箱,因为基本类型的广泛使用,同时Java

又是面向对象的编程语言,所以提供了包装类。

(2)基本数据类型包括:byte、short、int、long、float、double、char、boolean

对应的包装类为:Byte、Short、Intger、Float、Double、Character、Boolean。

二、使用包装类的原因

java是面向对象的语言,很多类和方法中的参数都需使用对象(例如集合),但基本数据类型却不是面向对象的,这就造成了很多不便。

ArrayList<int> list = new Arrays<>();无法通过编译,为了解决这个问题,我们就将8个基本数据进行包装,使他们具有对象的性质,包括可以添加属性和方法,在java.lang包中。

三、拆箱与装箱

其实就是基本数据类型和包装类进行相互转换,将基本数据类型转化为对应类型的包装类的过程叫“装箱”;将包装类转为对应类型的基本数据类型的过程叫“拆箱

int——>Integer 装箱

Integer——>int 拆箱


Integer a=0;
for(int i =0;i<100;i++){
    a=a+i;
}
在这串代码中 
在给a赋值的时候就发生了自动装箱
在运算过程中发生了自动拆箱

装箱

int num=23;
Integer i = Integer.valueOf(num);
Integer i =23;

拆箱

Integer num=new Integer(10);
int num=10;

Float sum=new Float(20.2);
folat sum=20.2;

四、基本类型与包装类的区别

public class test{
    public static void main(String[] args){
        int i=128;
        Ingeter i2=128;
        Ingeter i3=new Ingeter(128);
        System.out.println(i==i2);//Ingeter会自动拆箱为int,为true
        System.out.println(1==i3);//Ingeter会自动拆箱为int,为true
        Intrger i4=127;
        Ingrter i5=127;
        System.out.println(i4==i5)//true
        Intrger i6=128;
        Ingrter i7=128;
        System.out.println(i4==i5)//false
        Ingeter i8=new Ingeter(127);
        System.out.println(i5==i8);//false
        Integer i9 = new Integer(128);
        Integer i10 = new Integer(123);
        System.out.println(i9 == i10);  //false

    }

}

为什么i4和i5比的事true,而i6和i7比是false?英文valueOf()函数,这个函数对于-128到127之间的数就会进行缓存,在第一次创建i4=127时就进行了缓存,下次再写Integer i5=127时,就会从缓存中直接拿去,就不用new新对象了。

因为创建新对象就在堆中,所有i5和i8以及i9和i10 因为对象不一样为false;

四、什么时候进行自动拆箱与装箱

其实很简单(就是在需要对象的时候就装箱需要基本类型的时候就拆箱)

(1)添加到集合中时候,进行的事自动装箱

(2)涉及到运算的时候,加减乘除以及比较equals,compare to 进行自动拆箱

注意:于Integer valueOf(int i)方法中有IntegerCache()类,在自动装箱的过程中有个条件判断

if (i >= IntegerCache.low && i <= IntegerCache.high)
该方法总是缓存-128 到 127之间的值,同时针对超出这个范围的值也是可能缓存的。

六、总结

1、使用包装类的原因:java是面向对象的语言,很多类和方法的参数都需要使用对象。但是基本数据类型不是面向对象的,就造成了很多的不方便。

2.拆箱与装箱的概念:基本数据类型转为包装类的过程就叫装箱,反过来来说就是拆箱

3.java为了简便拆箱与装箱提供了自动拆装箱的功能,对于Ingeter,拆箱的过程就是通过I那个图尔实体调用intValue()方法;装箱的过程就是调用了Ingeter.valueOf()方法,帮你直接new了一个Ingeter对象

 建议使用valueOf() 方法创建一个包装类实例而不是直接使用构造方法,因为该方法可以走缓存提高性能

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱穿风衣的土豆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值