包装类型是一个类,它提供了诸如构造函数、类型转换、比较等非常实用的功能,而且在Java5之后又实现了与基本类型之间的自动转换,并且包装类解决了基本类型的无法实例化的问题,这使包装类型如虎添翼,更是应用广泛了,在开发包装类型已经随处可见,但无论是从安全性、性能方面来说,还是从稳定性方面来说,基本类型都是首选方案。

public class PriorityBaseType {
    public static void main(String[] args){
        PriorityBaseType pbt = new PriorityBaseType();
        int i=140;
        /**
         * 基本类型
         * 执行过程
         * 1.i通过valueOf方法包装为Integer对象
         */
        pbt.f(i);
        /**
         * 包装类
         * 执行过程
         * 1.i通过valueOf方法包装为Integer对象
         * 2.由于没有f(Integer i)方法,编译器会把Integer转换为int
         * 3.int自动拓宽为long,编译结束
         */
        pbt.f(Integer.valueOf(i));
    }
      
    public void f(long f){
        System.out.println("基本类型的方法被调用");
    }
      
    public void f(Long a){
        System.out.println("包装类型的方法被调用");
    }
      
}


上面的程序总首先声明了一个int变量i,然后加宽城long型,再调用f()方法,分别传递intlong的基本类型和包装类型。

使用包装类型确实有方便的地方,但是会引起一些不必要的困惑,如上面这个例子,如果f()的两个重载方法使用的基本类型,而且实参也是基本类型,就不会删除以上问题,而且程序的可读性更强。自动装箱(拆箱)虽然很方便,但引起的问题也非常严重,不知道执行哪个方法。