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

我们知道,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);


  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值