包装类型是一个类,它提供了诸如构造函数、类型转换、比较等非常实用的功能,而且在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()方法,分别传递int和long的基本类型和包装类型。
使用包装类型确实有方便的地方,但是会引起一些不必要的困惑,如上面这个例子,如果f()的两个重载方法使用的基本类型,而且实参也是基本类型,就不会删除以上问题,而且程序的可读性更强。自动装箱(拆箱)虽然很方便,但引起的问题也非常严重,不知道执行哪个方法。