包装类概述
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("--------");
}
}