- 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()”是比较两个对象的内容。
- 这个一定得搞清楚,否则,在遇到问题的时候,可真是会让人抓狂的。