JavaEE之包装类型

0 阅读2分钟

包装类

  • 包装类就是把基本类型的数据包装成对象的类型。就比如将int类型的数据包装成类似于String这种可以实例化为对象,内部有成员变量成员方法的类型

  • 包装类型因为相当于一个拥有成员变量,成员方法的类,创建为对象后还有引用指针等对对象进行管理,所以理论上,包装类型相比基本类型性能更差 public static Integer valueOf(int i) image.png

  • 基本类型的数据包装成对象的方案

    基本类型的数据包装成对象的方案
    public Integer(int value):已过时
    public static Integer valueOf(int i)
    //new Integer(a);//已过时,不建议使用
    Integer.valueOf(a) //推荐
    int a = 1; Integer b = Integer.valueOf(a);
    double d1 = 3.14; 
    Double d2 = Double.valueOf(d1);
    
  • 自动装箱: 基本数据类型可以自动转换为包装类型。

  • 自动拆箱: 包装类型可以自动转换为基本数据类型。

// 把基本数据类型变成包装类对象。Java支持自动装箱:基本类型的数据可以直接变成包装类型的对象。
int i1 = 100;
Integer i2 = i1;
// 把包装类对象变成基本数据类型。Java支持自动拆箱:包装类对象可以直接变成基本数据类型。
int i7 = i2;
  • 包装类具备的其他功能

    • 可以把基本类型的数据转换成字符串类型。 image.png
    // 把基本数据类型变成字符串。Integer.toString(基本类型)
    Integer i2 = 3;
    i2.toString();
    Double d3 = 3.14;
    d3.toString();
    Boolean b1 = Boolean.TRUE;
    b1.toString();
    
    • 可以把字符串类型的数值转换成数值本身对应的真实数据类型 image.png
    // - 把字符串的数值变成基本数据类型。Integer.parseInt(字符串数字)
    int i = Integer.parseInt("1");
    double v = Double.parseDouble("3.14");
    
  • 剖析包装类型Integer源码,可以ctrl+左键,进入到Integer的源码中的valueOf方法,这个方法是将基本数据类型装箱为包装数据类的

    • 可以看到当值在-128到127之间的时候,java会直接到缓存中取数据,相同的值,引用同一块数据地址,当不在这个范围内,java则会在新内存中创建数据并引用 image.png
    //面试题
    Integer i3 = 100;//从缓存池中获取,内存地址固定
    Integer i4 = 100;//从缓存池中获取,内存地址固定
    System.out.println(i3 == i4);//true,因为内存地址一样
    Integer i5 = 200;//创建新的对象,拥有新的内存地址
    Integer i6 = 200;//创建新的对象,拥有新的内存地址
    System.out.println(i5 == i6);//false,内存地址不一样
    //java为了提升操作数字的性能,将-128~127缓存到缓存池中,
    //如果数字在这个范围内直接从缓存池中获取