- public class WrapperDemo{
 - public staticvoid main(String[] args){
 - int data1=21;
 - int data2=24;
 - //打包成为对象
 - Integer data1Wrapper = new Integer(data1);
 - Integer data2Wrapper = new Integer(data2);
 - //原始数据直接除以3
 - System.out.println(data1/3);
 - //将数据打包,转换为double型,除以3
 - System.out.println(data1Wrapper.doubleValue()/3);
 - //比较
 - System.out.println(data1Wrapper.compareTo(data2Wrapper));
 - }
 - }
 
通过上面的代码和运行结果,看到了将基本数据类型打包成为对象带来的好处了吧,别着急,这还只是javase5之前的做法,在javase5之后就已经支持自动装箱和拆箱了,在这,就不再单独写代码出来了,只写几个能说明问题的语句就可以了,相信很容易理解的。
- javase5之前,手动打包
 - Integer data1 = new Integer(10);
 - 事项将基本类型数据转换为对象
 - javase5之后,支持自动打包
 - Integer data1 = 10;
 - 便可以实现将基本类型的数据转换为对象
 - eg:
 - 在上面的代码中,可以采用,可以直接进行两个基本数据类型的比较
 - data1.compareTo(data2);
 - 基本数据类型本身没有什么方法,当你运行之后会发现,它仍然可以正确运行,这就自动装箱和拆箱带来的好处
 
再来说说自动装箱拆箱
自动装箱和拆箱,从本质上讲,是编译器帮了我们的忙,这就是所谓的“编译器蜜糖”,既然这么好,是不是就可以放心的用了呢?
先别着急,喝口水,咱再接着唠
看看下面的情况,您是否了解
- Integer i = null;//表明i没有参考至任何对象
 - int j = i ;//相当于 int j = i.intValue()
 - 这样的代码,编译时是可以通过的,因为它的语法是正确的,但在运行时,就会排除NullPointerException错误,这是由于i并没有参考至任何对象造成的
 
- 个人建议,如果您对装箱拆箱不是理解的很清楚,最好还是按部就班的一步一步的对它进行装包和拆包,这样,有的时候,可能会为你节省很多纠错的时间哦
 
还是自动装箱拆箱
- public class BoxDemo{
 - public static void main(String[] args){
 - Integer data1 = 500;
 - Integer data2 = 500;
 - System.out.println(data1==data2);
 - }
 - }
 
在你看到接下来的运行结果前,您先猜猜看,运行的结果会是怎样的呢?true or false?
false?没错,它就是false,自动装箱时,对于值从-128-127之间的数,被装箱后,会被放在内存中进行重用,
如果超出了这个值的范围就不会被重用的,所以每次new出来的都是一个新的对象,结果自然会是false。
- 在这里,区别一个概念“==”和equals()
 - “==”是比较两个对象是不是引用自同一个对象。
 - “equals()”是比较两个对象的内容。
 - 这个一定得搞清楚,否则,在遇到问题的时候,可真是会让人抓狂的。
 
                




