java中几种常见的类1-包装类

1.包装类

 Java是面向对象的语言,但并不是“纯面向对象”的,因为我们经常用到的基本数据类型就不是对象。但是我们在实际应用中经常需要将基本数据转化成对象,以便于操作。比如:将基本数据类型存储到Object[]数组或集合中的操作等等。

  为了解决这个不足,Java在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八个和基本数据类型对应的类统称为包装类(Wrapper Class)。  包装类均位于java.lang包,应用是不需要导入。

 八种基本的数据类型与其所对应的包装类: 

java中几种常见的类1-包装类

在这八个类中,除了Character和Boolean以外,其他的都是“数字型”,“数字型”都是java.lang.Number的子类。Number类是抽象类,因此它的抽象方法,所有子类都需要提供实现。Number类提供了抽象方法:intValue()、longValue()、floatValue()、doubleValue(),意味着所有的“数字型”包装类都可以互相转型。

八种包装类基本都一样,介绍int的包装类Integer

package cn.bjsxt.array01;

public class TextWrappedClass {
    public static void main(String[] args) {
        Integer i=new Integer(1000);//int所能表示的最大数
        System.out.println(Integer.MAX_VALUE);
        System.out.println(Integer.toHexString(i));//转换为二进制
        Integer i2=Integer.parseInt("234");//功能是将数字字符转换成数值;
        Integer i3=new Integer("333");
        System.out.println(i3.intValue());//Integer对象转化成int,其他的类例如double float都有此用法
        
        
    }

}

2.自动拆箱 自动装箱 缓存问题

自动装箱和拆箱就是将基本数据类型和包装类之间进行自动的互相转换。JDK1.5后,Java引入了自动装箱(autoboxing)/拆箱(unboxing)。

 整型、char类型所对应的包装类,在自动装箱时,对于-128~127之间的值会进行缓存处理,其目的是提高效率。

  缓存处理的原理为:如果数据在-128~127这个区间,那么在类加载时就已经为该区间的每个数值创建了对象,并将这256个对象存放到一个名为cache的数组中。每当自动装箱过程发生时(或者手动调用valueOf()时),就会先判断数据是否在该区间,如果在则直接获取数组中对应的包装类对象的引用,如果不在该区间,则会通过new调用包装类的构造方法来创建对象

代码分析解释:

package cn.bjsxt.array01;

public class TextBoxing {
    public static void main(String[] args) {
        Integer a=new Integer(1000);
        Integer q=1000;//没有报错,jdk5.0之后。自动装箱,编译器自动加上了Integer a=new Integer a=new Integer(1000)或者是Integer a =Integer.valueOf(1000);
        Integer b=2000;//自动装箱;
        int c=b;//自动拆箱。编译器改进:b.intValue();
        
        Integer d=1234;
        Integer d2=1234;
        System.out.println(d==d2);//返回值为false,因为虽然数值相同,但是为两个不同对象;
        System.out.println(d.equals(d2));//返回值为true,因为equals方法中比较的是两个数值;
    /*
     * 自动装箱过程是通过调用包装类的valueOf()方法实现的,
     * 自动拆箱过程是通过调用包装类的 xxxValue()方法实现的(xxx代表对应的基本数据类型,如intValue()、doubleValue()等)。
     */
        //缓存问题
        Integer d3=-100;//整数所表示的范围【-128,127】之间的数,仍然当作基本数据类型来处理,可以提高效率;
        Integer d4=-100;
        System.out.println(d3==d4);//返回值为true
        System.out.println(d3.equals(d4));//返回值为true,与上方无异;
    
    }

}