包装类

包装类概述

Java设计的基本原则是一切皆对象,就是把一切操作都用对象的的形式进行描述。但是Java中的基本数据类型不是对象,为了解决这个问题,Java提供了包装类。
包装类的好处在于可以在对象中定义更多的功能方法来操作该数据。而且以后使用的集合只能是对象的集合,所以必须把基本数据类型包装成对象。

//包装类雏形
class MyInt{	//基本数据类型的包装类
    private int num;
    public MyInt(int num){	//将基本数据类型包装起来
        this.num = num;
    }
    public int intValue(){	//将包装的数据返回
        return this.num;
    }
}
public class Demo{
    public static void main(String[] args){
        MyInt mi = new MyInt(2);
        int temp = mi.intValue;
    }
}

Java中一共提供了8中包装类,可以分成以下两类:

  • 对象型包装类(Object直接子类):Character、Boolean
  • 数值型包装类(Number直接子类):Byte、Short、Integer、Long、Float、Double

Number是一个抽象类,里面定义了6种抽象方法:intValue(), doubleValue()等。

对于包装类的操作,有以下两种方法:

  • 装箱:把基本数据类型变为包装类的形式。
  • 拆箱:从包装类中取出被包装的数据,利用Number类中继承来的xxxValue()方法。
public class Demo{
    public static void main(String[] args){
        Double obj = new Double(3.14);	//装箱
        double temp = obj.doubleValue();	//拆箱
        System.out.println(temp);
    }
}
//执行结果:3.14

为了方便包装类的使用,Java提供了自动装箱和自动拆箱的机制,可以把包装类对象当成基本数据类型直接运算。

public class Demo{
    public static void main(String[] args){
        Double obj = 3.14;	//自动装箱
        double temp = obj;	//自动拆箱
        obj ++; //包装类直接进行计算
        System.out.println(obj*2);
    }
}
//执行结果:6.28

如果使用自动装箱这一机制时,和String类相似,Java会在对象池中存储对象,以供重复使用。

public class AutoPacking {
    public static void main(String[] args) {
        Integer obja = 10;
        Integer objb = 10;
        Integer objc = new Integer(10);
        System.out.println(objb == obja);   //true
        System.out.println(objc == obja);   //false
        System.out.println(objc.equals(obja));  //true
    }
}

上面的代码可以看出,如果使用自动装箱来实例化时,会使用同一块堆内存空间。而使用构造方法实例化时,会开辟新的堆内存空间。在进行包装类数据比较的时候,最可靠的方法是equals()。

Object类可以接收所有的类对象,也可以接收数组、接口等引用数据类型。 而现在有了自动装箱机制,Object类也可以接收基本数据类型了,因为所有的基本数据类型都会自动装箱,然后向上转型为Objcet对象。

//使用Object接收基本数据类型
public class Demo{
    public static void main(String[] args){
        Object obj = 10;	//自动装箱并向上转型
        Integer temp = (Integer)obj;	//Object向下转型
        System.out.println(temp*2);
    }
}
//执行结果:20

包装类类型转化

包装类中提供了非常常用的数据转换方法,可以将String类型变为基本数据类型。下面是常用的静态方法。

String转化为Integer

Integer类:public static int parseInt(String s);

Double类:public static double parseDouble(String s);

Boolean类:public static boolean parseBoolean(String s);

public class Demo{
    public static void main(String[] args){
        String str = "123";
        int temp = Integer.parseInt(str);
        System.out.println(temp);
    }
}
//执行结果:123

将String对象转换为基本数据类型要求String对象中的字符串全是数字,否则转换会出错。在parseBoolean()方法中,如果字符串是“true”就转换为true,否则一律转换为false。

Integer转化为String

  • 转换方式

    • 方式一:直接在数字后加一个空字符串
    • 方式二:通过String类静态方法valueOf()
public class IntegerDemo {
    public static void main(String[] args) {
        //int --- String
        int number = 100;
        //方式1
        String s1 = number + "";
        System.out.println(s1);
        //方式2
        //public static String valueOf(int i)
        String s2 = String.valueOf(number);
        System.out.println(s2);
        System.out.println("--------");
    }
}

包装类

上一篇:[hdu7042]二叉树


下一篇:C中的const,volatile与restrict