Java有8种基本数据类型,为什么又要出现对应的8种包装类:
1、Java的8种基本数据类型不支持面向对象编程机制
2、8种基本数据类型不具备“对象”的特性:没有成员变量、方法可供调用
3、例如:某个方法需要Object类型的参数,但实际需要的却是2、3这种值,只靠基本的数据类型无法转换成Object参数传递过去
4、为解决8种基本数据类型不能当成Object类型使用的问题,Java提供了包装类的概念:
8种基本数据类型与对应的包装类:
byte ------------------------> Byte
short -------------------------> Short
int -------------------------> Integer
long -------------------------> Long
char -------------------------> Character
float -------------------------> Float
double -------------------------> Double
boolean -------------------------> Boolean
5、基本类型与包装类之间的转换(JDK1.5之前):
5.1、通过包装类对应的构造器实现
5.2、通过传入一些字符串参数,来构建包装类对象,如:
Integer a = new Integer("5.5");
5.3、如果想获得包装类对象中包装的基本类型变量,可以用包装类提供的.xxxValue()方法
代码示例:
public class WrapperClass{ public static void main(String[] args){ //-构造器方法定义Integer包装类a,并赋值 Integer a=new Integer("5"); System.out.println(a); //-构造器方法定义Double包装类b,并赋值 Double b=new Double("5.5"); System.out.println(b); //-通过包装类.xxxValue()方法,从包装类对象中获取基本类变量 int c=a.intValue(); System.out.println(c); double d=b.doubleValue(); System.out.println(d); } }
运行结果:
6、基本类型与包装类之间的转换(JDK1.5之后):
6.1、自动装箱(Autoboxing):把一个基本类型的变量,直接赋值给对应的包装类变量,或者赋值给Object变量(Object是所有类的父类,子类对象可以直接赋给父类变量----Java的向上自动转型特性)如:
Integer i=3;或Object j=4;
6.2、自动拆箱(AutoUnboxing):把一个包装类变量,直接赋值给一个基本类型的变量,如:
int a=i;
注意:int b=j;编译会报错,原因是:Java有向上自动转型特性,但不能自动向下转型,想要转要加强制转换,如:
int b = (Integer)j;
代码示例:
public class AutoBoxingUnboxing{ public static void main(String[] args){ //-自动装箱 Integer a=3; //-自动拆箱 int b=a; //-直接赋值给Object类型的变量,利用了Java的向上自动转型特性 Object o=true; if(o instanceof Boolean){ //-Object类型不能直接赋值给Boolean类型,Java不能自动向下转型,如下代码会报错 //Boolean d=o; //-想向下转型可以用强制转换方法,如下代码 Boolean c=(Boolean)o; System.out.println(c); } } }