JavaSE(八)-装箱拆箱

目录:

  •     java中的数据类型
  •     包装类
  •     装箱与拆箱
前言:    为了实现java万物皆对象而设计, 可以说有有包装类后就可以不用基本数据类型了, 所有使用的都是对象.

正文:    

    1.    java中的数据类型

   四类八种:    

原生类型 (Primitive Types):

   byte      short  int    long

   double     float  char   boolean

其中,

   整数    byte   short  int  long

   浮点数  double float

   字符    char  (Unicode码,16-bit)

   布尔值  boolean

参考网址:

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

    2.    包装类Wrapper Class

在java.lang.*下有8个类:

Byte  Short  Integer  Long

Double  Float

Character

Boolean

注意:它们是class类型,都是Object的子类

把它们叫做包装类,是对原生类型做了简单的包装。

包装是什么意思?(模仿着写一个包装类, 实际你可以查看jdk的源码)

class AfInteger
{
     private int value;
     public AfInteger(int v)
     {
          this.value = v;
     }
     int  intValue()
     {
          return this.value;
     }
}
为什么要提供Wrapper class?直接用原生类型不行吗?
 :有些地方要求必须用一个Object类型
比如,
    ArrayList<Integer> 
    Hashmap<Integer, Student>
由于模板类要求传入Object类型,不能用int,所以提供一个包装类Integer
注意:
1. Java里没有“重载操作符"的语法
     我们自己写的类是不能这么自动转换的。
2. 只有原生类型primitive types和它们对应的包装类Wrap classes之间支持。
3. 这是编译器特别加的东西,是Java语法的 特例(特殊定义的)

    

    3.装箱拆箱

    以int和Integer的转换为例:
1. int -> Integer  (称为装箱:  boxing )
    int nn = 123;
    Integer  aa = new Integer(nn);
        2.  Integer -> int ( 称为拆箱: unboxing )
    int vv = aa.intValue();

int nn = 123;

Integer  aa =  nn;

编译器自动创建了一个new Integer(nn)对象,称为自动装箱 auto-boxing

Integer aa = new Integer(100);

int vv = aa;

编译器自动取出aa的值,称为自动拆箱auto-unboxing。

http://docs.oracle.com/javase/tutorial/java/data/autoboxing.html

又如,

      void  test(int a)
      {
      }
      void what()
      {
            Integer  a = new Integer(123);
            test(a);
      }

        函数参数类型要求的是int,但我们传入一个Integer也是可以的。。。虽然类型不匹配,但编译器会帮我们自动拆箱。
        反之,如果参数要求Integer类型,我们传入一个int也行。。。

      void  test(int a)
      {
      }
      void what()
      {
            Integer  a = new Integer(123);
            test(a);
      }

总结:

    包装类,  它们是为了弥补Java的语法缺陷而产生的,是编译器特别添加的特性。

    java支持自动装箱拆箱, 所以包装类用起来和基本数据类型没有什么区别, 

    包装类中提供很多有用的方法, 需要深入学习(看文档).(例如getByte("charActerSetEncoding"), 以及一些构造方法, 很有用的)

    

java有了包装类就可以说"万物皆对象了", 包装类中很多方法,具体看文档,  java支持自动装箱拆箱.

    

好像没啥可以讲的了......emmmm,  学习编程有项重要的能力掌握了可以开始提升自己,  看文档, 最了解某种东西的人一定是它的制造者, 而官方文档就是制造者写给用户看的,  比视频教程讲的都详细正确.   但是, 大多数文档都是英文的, 这很尴尬, 不过所幸, jdk有中文文档, 在开源中国社区上....

        好希望有个小姐姐来带领我学英语...........(羞涩)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值