8个基本数据类型的包装类

来源:互联网 发布:mac安装win10加载驱动 编辑:程序博客网 时间:2024/05/04 13:44

我们知道,java提供的8种基本数据类型并不支持面向对象的编程机制,不具备“对象“的特性,没有成员变量、方法可以被调用。java之所以提供这8种基本数据类型,主要是为了照顾程序员的传统习惯。

这8种基本数据类型带来了一定的方便性,例如简单的数据运算和常规数据的处理。但是在某些时候,基本数据类型也会有一些制约,例如所有的引用类型的变量都继承了Object类,都可以当成Object类型变量使用。但基本数据类型的变量不可以,如果有方法需要Object类型的参数,但实际需要的值是1、2、3等数值,这可能就比较难以处理。

为了解决8中基本数据类型变量不能当成Object类型变量使用的问题,java提供了包装类的思想,为8种基本数据类型分别定义了相应的引用类型,并称之为基本数据类型的包装类。

基本数据类型和包装类的对应表

byte

short

int

long

float

double

char

boolean

Byte

Short

Integer

Long

Float

Double

Character

Boolean

 

class BaoZhuang{    publicstatic void main(String[] args){        int i= 123;        Integerinteger = new Integer(i);        System.out.println(integer);               byte b= 123;        Bytebb = new Byte(b);        System.out.println(bb);               shorts = 123;        Shortss = new Short(s);        System.out.println(ss);               long l= 123;        Longll = new Long(l);        System.out.println(ll);         floatf = 123.0f;        Floatff = new Float(f);        System.out.println(ff);         doubled = 123.0;        Doubledd = new Double(d);        System.out.println(dd);         char c= 'c';        Charactercharacter = new Character(c);        System.out.println(character);         booleanbl = true;        Booleanboo = new Boolean(bl);        System.out.println(boo);    }} 


 

除了int和char之外,其他的基本数据类型只需要首字母大写即可编程它们对应的包装类。

自动装箱和自动拆箱:

我们都知道,不可以直接把基本数据类型赋值给引用数据类型。所以在JDK1.5之前,构建一个包装类需要通过构造器来构造包装类对象,但是这显得代码过于麻烦,所以从1.5之后就提供了自动装箱和自动拆箱的功能。

自动装箱:就是可以把一个基本类型变量直接赋值给对应的包装类变量,或者赋值给Object变量(因为Object类是所有类的父类);

      

  int i= 123;        Integerinteger = i;//JDK1.5之前:new Integer(i);         //先把123456自动装箱为Integer类型,Object代表Integer        Objectobj = 123456;        System.out.println(obj);//打印结果123456

 

自动拆箱:与自动装箱相反,允许直接把包装类对象直接赋值给一个对应的基本类型变量。

//TODO代码演示自动装箱与自动拆箱

 

        //自动装箱        Integerinteger = 1234;        //自动拆箱        intint2 = integer;        System.out.println(int2);               int i= 123;        Objectobj = i;        int ii= (Integer)obj;        System.out.println(ii); 

 

思考:

              

     Byteb = 123;                   //b自动转换成了byte,byte强转int                   Integerinteger = (int)b;                   System.out.println(integer);

当JDK提供了自动装箱和自动拆箱功能后,大大简化了基本类型变量和包装类对象之间的转换,值得提出的是,进行自动装箱和自动拆箱时,必须注意类型匹配,例如Integer只能自动拆箱成int类型变量,不要试图拆箱成boolean类型变量;与之类似的是,int类型只能自动装箱成Integer对象,即便赋给Object类型变量,那也是利用了自动转型的特性,不要试图将int自动装箱成Boolean类型对象。

借助这种机制,一定程度上,我们可以把包装类当成基本数据类型使用,也可以把基本类型的变量近似的当成对象使用(当然,使用的时候需要自动装箱一下)。

除此之外,包装类还可以实现基本类型变量和字符串之间的转换,把字符串类型的值转换为基本类型的值有两种方式。

1、parseXxx(String )静态方法。(Character除外)

2、利用包装类提供的Xxx(Stirng s)构造器。

class BaoZhuang{    publicstatic void main(String[] args){        //字符串和基本数据类型可以转换了        //1 静态方法调用        intresult = Integer.parseInt("123");        System.out.println(result);        //2 构造方法创建        result= new Integer("1234");        System.out.println(result);    }} 


String类型也提供了多个重载的valueOf()方法,用于将基本类型变量转换成字符串,下面程序示范 了这种转换关系。

//TODO 字符串与包装类的互转        Stringstr2 = String.valueOf(i);        System.out.println(str2);        //但是实际中,我们有更加简便的方法将数据类型转为String        int i= 123;        Stringstr = i + ""; 


当包装类型的变量是引用数据类型,但是我们也可以拿这些包装类型对象与数值类型的值比较,这种比较是直接取出包装类的实例所包装的数值再与之进行比较。

//TODO        Integerinteger = 123;        System.out.println(integer> 456);        Integerinteger1 = 1234;        Integerinteger2 = 456;        System.out.println(integer1> integer2);


但是,如果是两个包装类型直接比较,即便包装的值相同,但是也会返回false,因为引用数据类型比较是有其他方式比较的,以后会说引用数据类型的比较。

//TODO         Integerinteger1 = 456;        Integerinteger2 = 456;        System.out.println(integer1== integer2);//false


//练习包装类方法、静态方法、构造器、常量

     

   //字符串数字解码接受不同进制格式的字符串数字        intresult = Integer.decode("0x123456");        System.out.println(result);        //字符串解码,仅支持字面量数字        result= new Integer("12345");        System.out.println(result);

0 0
原创粉丝点击