对于8个基本类型,java提供了他们相应的包装类:

基本类型 包装类

byte java.lang.Byte

short java.lang.Short

int java.lang.Integer

long java.lang.Long

float java.lang.Float

double java.lang.Double

char java.lang.Character

boolean java.lang.Boolean

其中除了Character与Boolean的父类是Object之外,其余的都是继承自:java.lang.Number

 

在Java中,抽象类 Number 是 BigDecimal、BigInteger、Byte、Double、Float、Integer、Long 和 Short 类的超类。该类提供了六个方法,如图-1所示。

图- 1

以上六个方法中,floatValue方法和doubleValue方法在使用时,可能涉及到舍入;其它四个方法可能涉及到舍入或者取整。

 

例如  Number a = 123;

    Number b = 123.123;

    int c = a.intValue();

    double d = b.doubleValue();//此时可以通过某一类型Value()方法,把Number类型的对象转成基本类型。

 

 

)2包装类和基本类型之间的转化

 

  )2.1 基本类型转为包装类 : 包装类.ValueOf();方法

    例如 :int a = 20;

        Integer b = Integer.valueOf(a); //可以把基本类型转化为包装类。 当然这个方法的参数还可以为可以表达为数字的string对象。读api

 

  )2.2包装类转基本类型:包装类的 基本类型Value()方法。且一个包装类是可以被转化为多个基本类型的,例如Integer中就有intValue();doubleValue();longValue();等等

    例如

      Integer a = 123;

      int b = a.intValue();

      double c = a.doubleValue();

 

 

)3.包装类中将可以转化为该类的字符串对象进行转化的静态方法():继承Number的包装类的6个数字子类,都有将字符串转为自身对象的方法

    包装类  parse包装类(字符串);

 

随便一提,把其他包装类的对象转化为字符串的方法,一般用String中定义的valueOf;

 

 

)4.那么java是如何实现的自动拆装箱呢?

事实上JVM不支持该特性,自动拆装箱只是编译器在编译过程中的"预处理"操作。编译器在看到需要在包装类与基本类型之间转换时,会在编译为字节码时进行改变:

源代码中 编译后的字节码中

Integer a = 100 => Integer a = Integer.valueOf(100);

Integer b = 200 => Integer b = Integer.valueOf(200);

Integer c = a+b => Integer c = Integer.valueOf (a.intValue( ) + b.intValue( ));

double d = c => double d = c . doubleValue( );