java中除了基本数据类型还有引用类型两种。
为了体现java面向对象的思想,容易对基本数据类型进行操作,所以产生了包装类(Wrapped class)。
int 的包装类是 Integer , double 是Double ,long 的是Long....
在JDK1.5 之前 ,我们声明一个数据类型的对象以Integer为例 如下:
Integer i = new Integer(1000); 通过构造函数来把1000这个值传给对象i .
因为如果每次我们创建一个包装类对象的时候每次都new的话很麻烦,所以JDK 1.5之后 工作人员在对代码进行编译的时候动了手脚,凡是遇到右边是 基本数据类型,左边是包装类 想对应的。就会默认为我们进行小操作 。如下
Integer i =1000 ; 这样写就可以了,因为工作人员已经帮我们做了如下处理 Integer i =new Integer(1000);从而减少了程序员的输入量。不过道理还是新建一个Integer对象。这就是所谓的自动装箱(Auto Boxing)
同样也有自动拆箱(unbox)
在Integer中如果想把一个Integer类型转为 int类型,如下:
int a= new Integer(1000).intValue();
在JDK 1.5 之后我们只需要写 int a = new Integer(1000);就可以了
但是有一个例外 数值在 [-128,127]之前的数值不会进行自动装箱,拆箱,原因是为了提高运行效率,因为基本数据类型的效率比较高。 如:
Integer i = 10000;
Integer i2=10000;
System.out.println(i==i2) //结果为false 超过127了,自动装箱当作对象来处理,比较对象地址是否相等
Integer i = 100;
Integer i2=100;
System.out.println(i==i2) //结果为true 因为是基本数据类型了 只会比较他们的值