包装类

作者: 曾梦想仗剑天涯 | 来源:发表于2020-10-31 14:54 被阅读0次

包装类实现原理分析

    包装类的主要功能是针对于基本数据类型的对象转换而实现的,并且随着JDK的更新,包装类的功能也在发生着改变,有着更多的支持

认识包装类

  • Object类最大的特点是所有类的父类,并且可以接收所有的数据类型,但是在这个过程之中就存在有一个问题:基本数据类型并不是一个类,所有现在如果想要将基本数据类型以类的形式进行处理,那么就需要对其进行包装
//以int数据为例,实现一个包装处理定义
class Int { 
  private int data;
  public Int(int data) {
    this.data = data;
  }
  public int intValue() {
    return this.data;
  }
}
 public class JavaDemo {
  public static void main(String [] args) {
    Object obj = new Int(10);   //装箱:将基本数据类型保存在包装类之中
    int x = ((Int)obj).intValue();    //拆箱:从包装对象中获取基本数据类型
    System.out.println(x*2);
  }
}
  • 基本数据类型进行包装处理后可以像对象一样进行引用传递,同时也可以使用Object类来进行接收,但是如果我们都已经可以发现基本数据类型与Object类型之间的缺陷,那么JDK也早发现了同样的问题,所有JDK1.0就提供有了包装类概念,基本数据类型一共有八种,所以提供有八种包装类:


    此图来源于李兴华老师
  • 现在可以发现Java中包装类一共提供有两种类型:
    • 对象型包装类(Object的直接子类):Boolean、Character;
    • 数值型的包装类(Number直接子类):Byte、Short、Integer、Long、Float、Double;
  • Number是一个抽象类,看见Number都应该明确的表示它是一个数字的概念,这个类定义有如下方法:
No. 方法名称 类型 描述
01 public byte byteValue() 普通 从包装类之中获取byte数据
02 public short shortValue() 普通 从包装类之中获取short数据
03 public abstract int intValue() 普通 从包装类之中获取int数据
04 public abstract long longValue() 普通 从包装类之中获取long数据
05 public abstract float floatValue() 普通 从包装类之中获取float数据
06 public abstract double doubleValue() 普通 从包装类之中获取double数据
  • Number类中的方法就是直接提供有获取包装类中基本数据类型的功能

装箱与拆箱操作

    基本数据类型的包装类都是为了基本数据类型转为对象提供的,这样对于基本类型与包装类之间就有了如下的操作关系:

  • 数据装箱:将基本数据类型保存到包装类之中,一般可以利用构造方法完成;
  • 数据拆箱:从包装类中获取基本数据类型:
    • 数值型包装类已经由Number类定义了拆箱的方法类;
    • Boolean型:public boolean booleanValue();
//以int和Integer为例
public class JavaDemo {
  public static void main(String [] args) {
    Integer obj = new Integer(10);    //装箱
    int x = obj.intValue();   //拆箱
    System.out.println(x);
  }
}
//以double与Double为例
public class JavaDemo {
  public static void main(String [] args) {
    Double obj = new Double(10.0);    //装箱
    double x = obj.doubleValue();   //拆箱
    System.out.println(x);
  }
}
//以boolean与Boolean为例
public class JavaDemo {
  public static void main(String [] args) {
    Boolean obj = new Boolean(true);    //装箱
    boolean x = obj.booleanValue();   //拆箱
    System.out.println(x);
  }
}
  • 从JDK1.9之后,对于所有的包装类之中提供的构造方法就变成了过期处理,不建议用户再继续使用了,这是因为,从JDK1.5之后为了方便处理提供了自动的装箱与拆箱操作,这种手工的模式基本是没人用了。
//观察自动的装箱与拆箱
public class JavaDemo {
  public static void main(String [] args) {
    Integer obj = 10;   //自动装箱
    int x = obj;    //自动拆箱
    obj++;    //包装类对象可以直接参与数学运算
    System.out.println(x * obj);    //直接数学运算
  }
}
  • 除了提供有自动的数学运算支持之外,使用自动装箱最大的好处是可以实现Object接收基本数据类型的操作
//Object接收小数
public class JavaDemo {
  public static void main(String [] args) {
    Object obj = 19.2;    //double 自动装箱为 Double, 向上转型为Object
    //obj++; //Object类不可进行数学运算了
    double num = (Double) obj;    //向下转型为包装类,再自动拆箱
    System.out.println(num);
  }
}
  • 但是对于包装类需要注意一些问题:关于相等判断上。
//观察相等的判断处理
public class JavaDemo {
  public static void main(String [] args) {
    Integer x = 99;    // 127  128  -128  -129
    Integer y = 99;    // 127  128  -128  -129
    System.out.println(x == y);   //true false true false
    System.out.println(x.equals(y));   //true true true true
  }
}
  • 所以在进行包装类的相等判断的时候要使用equals()方法,而包装类本身也要考虑占位的长度,如果超过了一位的内容,就需要使用equals()来比较,如果没有超过,就是用 == 来判断

相关文章

  • 6.装饰设计模式

    装饰模式 包装类的特点: 1.包装类和被包装类实现同样的接口2.包装类持有一个被包装的对象3.包装类在实现接口过程...

  • JAVA基础---Date类 SimpleDateFormat

    ## 一、包装类 ##01. 包装类概述 >* 什么是包装类? >* 基本数据类型对应的包装类 总结: 1.什么是...

  • 包装类

    包装类也是系统定义好的,可以直接用包装类:专门将简单数据类型的数据进行封装得到相应的类** 简单数据类型 ...

  • 包装类

    拥有属性、方法,可以对象化交互 Java中的包装类包括:Integer、Long、Short、Byte、Chara...

  • 包装类

    基本数据类型的包装类 包装类说明 除了Integer和Character定义的名称和对应的基本类型差异大,其他六种...

  • 包装类

    刚才接触过了Object类,可以发现Object类能够接收所有的引用数据类型(对象、数组、接口),于是这里面又出现...

  • 包装类

  • 包装类

    为什么会有基本类型包装类: 为了对基本数据类型进行更多的操作,更方便的操作,java就针对每一种基本数据类型提供了...

  • 包装类

    基本数据类型对象包装类。为了方便操作基本数据类型值,将其封装成了对象,在对象中定义了属性和行为丰富了该数据的操作。...

  • 包装类

    针对八种基本定义相应的引用类型-包装类(封装类) 针对类的特点,就可以调用类中的方法基本数据类型 包装类 ...

网友评论

      本文标题:包装类

      本文链接:https://www.haomeiwen.com/subject/kdmsvktx.html