二、Java面向对象(13)_基本类型包装类

2018-05-03

 

基本类型包装类

 

一、装箱和拆箱
 

虽然 Java 语言是典型的面向对象编程语言,但其中的八种基本数据类型并不支持面向对象编程,基本类型的数据不具备“对象”的特性——不携带属性、没有方法可调用。 沿用它们只是为了迎合人类根深蒂固的习惯,并的确能简单、有效地进行常规数据处理。

这种借助于非面向对象技术的做法有时也会带来不便,比如引用类型数据均继承了 Object 类的特性,要转换为 String 类型(经常有这种需要)时只要简单调用 Object 类中定义的toString()即可,而基本数据类型转换为 String 类型则要麻烦得多。为解决此类问题 ,Java为每种基本数据类型分别设计了对应的类,称之为包装类(Wrapper Classes),也有教材称为外覆类或数据类型类。

基本数据类型及对应的包装类
基本数据类型对应的包装类
byteByte
shortShort
intInteger
longLong
charCharacter
floatFloat
doubleDouble
booleanBoolean


每个包装类的对象可以封装一个相应的基本类型的数据,并提供了其它一些有用的方法。包装类对象一经创建,其内容(所封装的基本类型数据值)不可改变。

-------------------------------------------------------------------------------------------------------------

 

装箱:把基本数据类型转成对应的包装对象。

拆箱:把包装类对象转成对应的基本数据类型。

自动装箱:可把一个基本类型变量直接赋给对应的包装类变量。

自动拆箱:允许把包装类对象直接赋给对应的基本数据类型变量。

 

自动装箱和拆箱是编译器级别的一个新特性,在底层依然是手动装箱和拆箱。

-----------------------------------------------------------------------------------------------------------

 

switch语句支持的数据类型:byte,short,chart,int与此同时也支持对应的包装类。为何?

  因为在底层,switch中会对包装类做手动拆箱操作。

---------------------------------------------------------------------

 

Object可以接受一切数据类型的值。

 

参考:https://www.cnblogs.com/ok932343846/p/6749488.html

     http://www.cnblogs.com/kebibuluan/p/7587438.html

    http://www.importnew.com/18346.html

--------------------------------------------------------------------------------------------------

 

二、包装类的基本使用

 

  (查阅API)

  包装类的常用操作:

  1、包装类的常量:MAX_VALUE、MIN_VALUE、SIZE(在内存中存储占多少位)、TYPE(对应的基本类型)...等等

  2、包装类的构造器:xxx类型的构造器(Xxx)(xxx表示8大基本数据类型)

    Xxx(xxx value):接受自己对应的基本类型值,如Integer(int val)、Boolean(boolean val)

    Xxx(String value):character除外

    构造器的作用,创建包装类的对象

  3、基本类型和包装类型的转换(装箱和拆箱)

    装箱:Integer i = new Integer(10);

       Interger i = Interger.valueOf(10);//推荐使用这种,带有缓存,效率更高

    拆箱:int n = i.initValue() ;

  4、String和基本类型/包装类型之间的转换

    String在int/Integer之间的转换操作:转换方法必须在String类中或者Integer类中

    

 

    • 把String 转换成包装类类型

      方式1:static Xxx ValueOf(String str):把String转换为包装类的对象

        例:Interger i = Interger.valueOf("123" );

      方式2:new Xxx(String str);

        例:Integer i = new Integer("123");

    • 把包装类对象转换成String

      String str = 任何对象.toString();

    • 把基本数据类型转换成String

      String str = 17 + " ";

    • 把String转换成基本数据类型

      static xxx parseXxx (String s) :XXX表示8大数据类型

      Sting input = “12345”;

 

  5、Boolean b = new Boolean("SB");//false

    只认 “true”或“TRUE”,其他都输出false。

-------------------------------------------------------------

 

三、包装类的缓存设计(享元模式)

 

享元模式是对象的结构模式。享元模式以共享的方式高效地支持大量的细粒度对象。

 

Byte、short、long、Integer:缓存[-128,127]区间的数据;

Character:缓存[0,127]区间的数据

 

包装对象之间的比较操作通通使用equals方法比较,它比较的是包装的数据

用equals:它是将包装类型拆箱成基本类型,再比较值。

 

在方法中,基本类型的数据类型存储在栈中,包装类型存放于堆中

 

参考:http://www.cnblogs.com/java-my-life/archive/2012/04/26/2468499.html

----------------------------------------------------------------------------------

 

四、包装类型和基本类型的区别

  1、默认值不同

  2、包装类中提供了该类型相关的很多算法操作

  3、在集合框架中只能存储对象类型,不能存储基本数据类型值

  4、在方法中,基本类型变量存储在栈中,包装类型存放于堆中,基本数据类型性能更高。

 

开发中,建议使用包装类型

 

参考:https://www.cnblogs.com/zsswpb/p/6329417.html

 

    

 

转载于:https://www.cnblogs.com/sunNoI/p/8984967.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值