java中的自动装箱与自动拆箱
来源:互联网 发布:阿里健康数据研究中心 编辑:程序博客网 时间:2024/05/22 16:01
1.自动装箱(Autoboxing)
基本数据类型不是对象,没有可以调用的方法,可以使用它的包装类型来调用一些如toString(),getClass()之类的方法。
如:Integer i = 10; 这时编译器实际执行的是 Integer i = Integer.valueOf(10);
这就是自动装箱。自动装箱就可以把一个基本数据类型子动变成一个包装类型。
使用反编译软件查看:
2.自动拆箱(unboxing)
自动拆箱跟自动装箱相反,自动拆箱是把Integer这样的包装类型重新简化为基本数据类型。
如: int k = new Integer(2); 这时编译器实际执行的是int k = new Integer(2).intValue();
这就是自动拆箱。使用反编译软件查看:
3.基本数据类型对应的包装类型的自动装箱池大小
- Byte,Short,Integer,Long默认情况下是-128~127
- Character的是0~127
- Float和Double没有自动装箱池
4.装箱池的作用
在装箱池指定的范围内会有缓存对象,加入是在范围的值会直接取已有的缓存对象,而不会new一个。
例如:
public static Integer valueOf(inti) { if(i >= -128 &&i <=IntegerCache.high) // 没有设置的话,IngegerCache.high 默认是127 //如果i在-128~high之间,就直接在缓存中取出i的Integer类型对象 return IntegerCache.cache[i + 128]; else return new Integer(i); //否则就在堆内存中创建 }
5.实例
Integer integer1 = 100; Integer integer2 = 100; Integer integer3 = 200; Integer integer4 = 200; Integer integer5 = new Integer(100); Integer integer6 = new Integer(100); int int1 = 100; int int2 = 200; System.out.println("integer1==integer2: " + (integer1 == integer2)); //ture 自动装箱,两个缓存中的Integer对象的引用来进行比较,所以是true System.out.println("integer1.equals(integer2): " + (integer1.equals(integer2))); // true Integer中对equals方法进行了重写,比较的的是两个对象的值是否相等,所以为true System.out.println("integer3==integer4: " + (integer3 == integer4)); // false 自动装箱,两个非缓存对象,而是new出来的不同对象的引用进行比较,所以为false System.out.println("integer3>integer4: " + (integer3 > integer4)); // false 自动拆箱,再比较大小 ,明显不成立 System.out.println("integer3.equals(integer4): " + (integer3.equals(integer4))); // true Integer中对equals方法进行了重写,比较的的是两个对象的值是否相等,所以为true System.out.println("integer5==integer6: " + (integer5 == integer6)); // false 两个不同的Integer对象引用的比较肯定为false System.out.println("integer5.equals(integer6): " + (integer5.equals(integer6))); // true Integer中对equals方法进行了重写,比较的的是两个对象的值是否相等,所以为true System.out.println("integer1==int1: " + (integer1 == int1)); // true 将Integer缓存对象拆箱后与int比较,即两个int类型进行比较,所以为true System.out.println("integer1.equals(int1): " + (integer1.equals(int1))); // true 重写的equals方法中的方法参数是Object类型,不能传一个基本数据类型的参数进去,所以发生了自动装箱, // int1被自动装箱为Integer类型,而Integer类型的最终父类是Object类型,然后就是两个Integer // 类型进行equals比较 System.out.println("integer3==int2: " + (integer3 == int2)); // true Integer对象拆箱后与int比较,所以为true System.out.println("integer3.equals(int2): " + (integer3.equals(int2))); // true 与倒3个输出原理相同
使用反编译查看
Integer integer1 = Integer.valueOf(100); Integer integer2 = Integer.valueOf(100); Integer integer3 = Integer.valueOf(200); Integer integer4 = Integer.valueOf(200); Integer integer5 = new Integer(100); Integer integer6 = new Integer(100); int int1 = 100; int int2 = 200; System.out.println("integer1==integer2: " + (integer1 == integer2)); System.out.println("integer1.equals(integer2): " + integer1.equals(integer2)); System.out.println("integer3==integer4: " + (integer3 == integer4)); System.out.println("integer3>integer4: " + (integer3.intValue() > integer4.intValue())); System.out.println("integer3.equals(integer4): " + integer3.equals(integer4)); System.out.println("integer5==integer6: " + (integer5 == integer6)); System.out.println("integer5.equals(integer6): " + integer5.equals(integer6)); System.out.println("integer1==int1: " + (integer1.intValue() == int1)); System.out.println("integer1.equals(int1): " + integer1.equals(Integer.valueOf(int1))); System.out.println("integer3==int2: " + (integer3.intValue() == int2)); System.out.println("integer3.equals(int2): " + integer3.equals(Integer.valueOf(int2)));
参考文章
阅读全文
0 0
- Java中的自动装箱与拆箱
- Java中的自动装箱与拆箱
- Java中的自动装箱与拆箱
- Java中的自动装箱与拆箱
- Java中的自动装箱与拆箱
- Java中的自动装箱与拆箱
- Java中的自动装箱与拆箱
- Java中的自动装箱与拆箱
- Java中的自动装箱与拆箱
- Java中的自动装箱与拆箱
- Java中的自动装箱与拆箱
- Java中的自动装箱与拆箱
- java中的自动装箱与拆箱
- Java中的自动装箱与拆箱
- java中的自动装箱与拆箱
- Java中的自动装箱与拆箱
- Java中的自动装箱与拆箱
- java中的自动装箱与自动拆箱
- 使用construct 2 设计个游戏
- JNI 开发实践-数据类型
- 第二章数据类型问题与解答
- SQL查询重复的记录
- iOS CallKit来电标签和电话拉黑
- java中的自动装箱与自动拆箱
- Android 实现apk文件下载并自动安装
- Python pass 语句
- h264 rgb yuv之间的关联
- abap中字符串连接:&& 替代 CONCATENATE
- 车牌识别“Towards End-to-End Car License Plates Detection and Recognition with Deep Neural Networks”
- DNS基础配置
- 排序算法(计数排序,基数排序,桶排序)
- 优化 Markdown 在 Notepad++ 中的使用体验