20、包装类以及装箱和拆箱

为什么要对基本数据类型进行包装?

/*
1、java中8种基本数据类型有对应准备了8种包类型。8中包类型属于引用数据类型,父类是Object
2、为什么要提供8种包类型呢?
        有的方法传参需要不同类型,我们需要进行基本数据的转换
        因为8种基本数据类型不够用
        所以sun公司又提供了8种包装类型。
 */

/*
我们手动建立一个类来修改基本数据类型
我们建的类叫做MyInt
 */
public class IntegerTest01 {
    
    
    public static void main(String[] args) {
    
    
    //存在这样的需求:调用doSome()方法的时候需要传一个数字进去。
        // 但是数组属于基本数据类型,而doSome方法参数的类型是Object
        //可见doSome方法无法接受基本数据类型,怎么办?
        //可以传一个数字对应的包装类进去

        //把100这个数字经过构造方法包装成对象。
        MyInt myInt = new MyInt(100);
        doSome(myInt);
        //100
    }

    public static void doSome(Object obj){
    
    
        System.out.println(obj.toString());
    }


}
public class MyInt {
    
    
    int value;

    public MyInt() {
    
    
    }

    public MyInt(int value) {
    
    
        this.value = value;
    }
    public String toString(){
    
    
        return String.valueOf(value);
        //自动转换字符串
    }



}

装箱和拆箱

/*
1、8种基本数据类型对应的包装类型是什么?
        基本数据类型          包装类型
        -------------------------------
        byte                java.lang.Byte(父类Number)
        short               java.lang.Short(父类Number)
        int                 java.lang.Integer(父类Number)
        long                java.lang.Long(父类Number)
        float               java.lang.Float(父类Number)
        double              java.lang.Double(父类Number)
        boolean             java.lang.Boolean(父类Object)
        char                java.lang.Character(父类Object)

2、以上8种包装类型类中,重点以java.lang.Integer为代表进行学习,其他照着学习
3、八种包装类中其中6个都是数字对应的包装类,他们的父亲都是Number,可以先研究一下Number中公共的方法:
    byte byteValue()以byte形式返回指定的数值
    abstract double doubleValue()以double形式返回指定的数值
    abstract float floatValue()以float形式返回指定的数值
    abstract int intValue()以int形式返回指定的数值
    abstract long longValue()以long形式返回指定的数值
    short shortValue()以short形式返回指定的数值

    这些方法其实所有的数字包装类的子类都有,这些方法是负责拆箱的。

*/
public class IntegerTest02 {
    
    
    public static void main(String[] args) {
    
    
        //将123这个基本数据类型,进行构造方法的包装达到了,基本数据类型向引用数据类型的转换
        //基本数据类型--->引用数据类型(装箱)
        Integer i = new Integer(123);

        //将以后引用数据类型--->基本数据类型
        float f = i.floatValue();
        System.out.println(f);//123.0

        //将引用数据类型--->基本数据类型(拆箱)
        int retValue = i.intValue();
        System.out.println(retValue);//123
    }

}

猜你喜欢

转载自blog.csdn.net/Alopecian/article/details/115407338