08java 1.5 的自动装箱拆箱机制是编译特性还是虚拟机运行时特性?分别是怎么实现的?
答:java1.5开始的自动装箱拆箱机制其实是编译时自动完成替换的,装箱阶段自动替换为了valueOf方法,拆箱阶段自动替换为了xxxValue方法。对于Integer类型的valueOf方法参数如果是-128~127之间的值会直接返回内部缓存池中已经存在对象的引用,参数是其他范围值则返回新建对象;而Double类型与Integer类型类似,一样会调用Double的valueOf方法,但是Double的区别在于不管传入的参数值是多少都会new一个对象来表达该数值(因为在指定范围内浮点型数据个数是不确定的,整型等个数是确定的,所以可以Cache)。注意:Integer、Short、Byte、Character、Long的valueOf方法实现类似,而Double和Float比较特殊,每次返回新包装对象,对于两边都是包装类型的比较==比较的是引用,equals比较的是值,对于两边有一边是表达式(包含算数运算)则==比较的是数值(自动触发拆箱过程),对于包装类型equals方法不会进行类型转换。
来自:基本数据类型-装箱和拆箱