jdk1.5特性
1.自动装箱与拆箱.
java中的包装类.
包装类是对java中的基本数据进行包装,可以将基本类型包装成类类型。

基本数据类型

四类八种.
1.整型  byte  short int long
2.浮点型 float double
3.字符 char
4.布尔 boolean

包装类
Byte  Short  Integer  Long
Float  Double
Character
Boolean

自动拆箱
直接将Integer对象赋值给int

自动装箱
直接将int赋值给Integer。


//对于Integer类它的自动装箱时,如果int值是在-128----127之间是从IntegerCache中取出的一个值,

如果不在这个范围内是重新new Integer()

示例一:

自动装箱与拆箱的功能事实上是编译器来帮您的忙,编译器在编译时期依您所编写的语法,决定是否进行装箱或拆箱动作。例如:
Integer i = 100;
相当于编译器自动为您作以下的语法编译:
Integer i = new Integer(100);
所以自动装箱与拆箱的功能是所谓的“编译器蜜糖”(Compiler Sugar),虽然使用这个功能很方便,但在程序运行阶段您得了解Java的语义。例如下面的程序是可以通过编译的:
Integer i = null;
int j = i;
这样的语法在编译时期是合法的,但是在运行时期会有错误,因为这种写法相当于:
Integer i = null;
int j = i.intValue();
null表示i没有参考至任何的对象实体,它可以合法地指定给对象参考名称。由于实际上i并没有参考至任何的对象,所以也就不可能操作intValue()方法,这样上面的写法在运行时会出现NullPointerException错误。



理论上运行会出错,但是在myeclipse运行的时候没有报错。。。???


自动拆装箱_编译器

示例二:(==问题)

 

自动拆装箱_自动装箱_02

其实这与==运算符的比较有关,在第3章中介绍过==是用来比较两个基本数据类型的变量值是否相等,事实上==也用于判断两个对象引用名称是否参考至同一个对象。

在自动装箱时对于值从–128到127之间的值,它们被装箱为Integer对象后,会存在内存中被重用,所以范例4.6中使用==进行比较时,i3与 i4实际上参考至同一个对象。如果超过了从–128到127之间的值,被装箱后的Integer对象并不会被重用,即相当于每次装箱时都新建一个Integer对象,所以范例4.7使用==进行比较时,i3与 i4参考的是不同的对象。

  还是按照正规的方式来写,而不是依赖编译器蜜糖(compile sugar)还是改成equals.

自动拆装箱_自动装箱_03