• 目录

Java拆箱与装箱

阅读量: 72 编辑

Java拆箱与装箱

装箱就是自动将基本数据类型转换为包装器类型;

拆箱就是自动将包装器类型转换为基本数据类型;

有了装箱拆箱,java可以根据上下文,自动进行转换,极大的简化相关编程。

public static void main(String[] args){
    Integer  a1 = 200;//装箱
    int b1 = 200;//拆箱

    Integer a2 = 100;
    Integer b2 = 100;

    Integer a3 = 200;
    Integer b3 = 200;

    System.out.println(a1==b1);//true
    System.out.println(a2==b2);//true
    System.out.println(a3==b3);//false
}

在装箱的时候自动调用的是Integer的valueOf(int)方法。

而在拆箱的时候自动调用的是Integer的intValue方法。

在源码 IntegerCache 类中:

在通过valueOf方法创建Integer对象的时候,如果数值在[-128,127]之间,便返回指向IntegerCache.cache中已经存在的对象的引用,否则创建一个新的Integer对象,所以第三个是false。

Integer、Short、Byte、Character、Long这几个类的valueOf方法的实现是类似的。

注意

Double、Float 的 valueOf 方法的实现是类似的。

在这里只解释一下为什么Double类的valueOf方法会采用与Integer类的valueOf方法不同的实现。因为在某个范围内的整型数值的个数是有限的,而浮点数却不是。

public static void main(String[] args){
    Double  a1 = 200.00;
    double b1 = 200.00;

    Double a2 = 100.00;
    Double b2 = 100.00;

    Double a3 = 200.00;
    Double b3 = 200.00;
    System.out.println(a1==b1);//true
    System.out.println(a2==b2);//false
    System.out.println(a3==b3);//false
}

  • 目录