Java包装类
执键写春秋 139 7

Java包装类

在Java中,由于基本数据类型不具有对象特征,也无法调用方法,因此每个基本数据类型都有对应的包装类,可以通过包装类实现对象化操作。【除了两个特殊的包装类Interger和Character,其他包装类都是基本数据类型首字母的大写。】 Java包装类

1. 基本数据与包装类比较

  1. 类型特点:包装类是引用类型,拥有方法和属性;基本数据类型只包含数值信息;
  2. 存储方式:包装类型对象实例化,借由new在堆空间里进行空间分配,对应栈空间中存储地址引用;基本数据类型变量对应栈空间中存储的是具体数据值。通常,包装类的效率会比基本数据类型的效率低,空间占用大;
  3. 初始值:基本数据类型有各自默认初始值,包装类的对象未初始化时,初始值均为null; Java包装类

    2. 拆箱与装箱

    2.1 装箱

装箱:把基本数据类型转换成包装类的过程。从实现的角度而言,可以分为“手动装箱”与“自动装箱”的操作。 (1)手动装箱:可以结合类型的构造方法或者valueOf()方法实现; (2)自动装箱:把一个基本类型变量直接赋给对应的包装类型变量。

2.2 拆箱

拆箱:把包装类转换成基本数据类型的过程。从实现的角度而言,可以分为“手动拆箱”与“自动拆箱”的操作。 (1)手动拆箱:可以通过xxxValue()方法实现; (2)自动拆箱:允许把包装类对象直接赋给对应的基本数据类型变量。

2.3 应用

  • 当进行赋值操作时,会触发拆装箱操作;

  • 当方法调用,传入参数时,也会触发相关操作;

  • 当结合操作符进行运算操作的时候,也会触发相关操作。

    3. 通过包装类进行基本类型与字符串转换

    3.1 基本数据类型转换为字符串

    int t1=2;
    String t2 = Integer.toString(t1);

    3.2 字符串转换基本数据类型

    //方法一包装类的parse
    int t3 = Integer.parseInt(t2);
    //方法二包装类的valueOf  先将字符串转换为包装类,在通过自动拆箱完成基本数据类型转换
    int  t4 = Integer.valueOf(t2);

    3.3 包装类之间对象的比较

    public static void main(String[] args) {
          //
          Integer one=new Integer(100);
          Integer two=new Integer(200);
          //对象在比较==的时候 比较的是引用,空间不同
          System.out.println("one==two的结果:"+(one==two));
    
          Integer three=100;//自动装箱
          System.out.println("three==100的结果:"+(three==100));//这是一个three自动拆箱的过程
    
          Integer four=100;//自动装箱
          // 在执行 Integer four=100; 这条语句的时候实际上是执行下面的操作
          /*
              Integer four=Integer.valueOf(100);
              对象池 -128~127 当这个范围内的数据有了(开辟了一个空间),
              在装箱操作的时候,再一次调用这个数据的时候会指向已经开辟的空间
    
           */
    
          System.out.println("three==four的结果:"+(three==four));//
    
    
    
    Integer five=200;
    System.out.println("five==200的结果"+(five==200));//拆箱完毕后比较的是==两边的数值

    Integer six=200;
    System.out.println("five==six的结果:"+(five==six));


    //八种基本数据类型,除了float和double其他的都可以应用常量池的概念
    Double d1=Double.valueOf(100);
    System.out.println("d1==100的结果:"+(d1==100));

    Double d2=Double.valueOf(100);
    System.out.println("d1==d2的结果:"+(d1==d2));
}

输出: one==two的结果:false three==100的结果:true three==four的结果:true five==200的结果true five==six的结果:false d1==100的结果:true d1==d2的结果:false

``` 注:java在几种包装类中提供了缓存设计,会对一定范围内的数据作缓存,如果数据在范围内,会优先从缓存中取数据,超出范围才会创建新对象。

  • Byte、Short、Integer、Long:[缓存-128,127]区间的数据
  • Character:缓存【0,127】区间de 数据
  • Boolean:缓存true、false。
  • Double、Float并不支持.
评论区

索引目录