java自动装箱和拆箱
2013-06-19 15:25
232 查看
java语言规范中说道:在许多情况下包装与解包装是由编译器自行完成的(在这种情况下包装成为装箱,解包装称为拆箱)
基本数据类型与对象的差别
基本数据类型不是对象,也就是使用int、double、boolean等定义的变量、常量。
基本数据类型没有可调用的方法。
eg: int t = 1; t. 后面是没有方法滴。
Integer t =1; t. 后面就有很多方法可让你调用了。
自动拆箱和装箱场景
自动拆箱有个很典型的用法就是在进行运算的时候:因为对象时不恩直接进行运算的,而是要转化为基本数据类型后才能进行加减乘除
Integer的自动装箱
Integer i=100; 编译器会自动将int类型常数100包装成Interger,采用的是Integer.valueOf(100);这个方法。
当-128=<i<=127的时候,返回的是IntegerCache中的数组的值;当 i>127 或 i<-128 时,返回的是Integer类对象。
很奇怪吧:这就归结于java对于Integer与int的自动装箱与拆箱的设计,是一种模式:叫享元模式(flyweight)
为了加大对简单数字的重利用,java定义:在自动装箱时对于值从–128到127之间的值,它们被装箱为Integer对象后,会存在内存中被重用,始终只存在一个对象
而如果超过了从–128到127之间的值,被装箱后的Integer对象并不会被重用,即相当于每次装箱时都新建一个 Integer对象
再看下面的例子:
为什么是false呢?
只有自动装箱才会用到上面的享元模式,而new出来的对象其实是直接在堆上开辟Integer对象,不会用到享元模式中的IntegerCache中的数组的值。
参考转载自以下文章,可结合原文查看:
/article/7049404.html
/article/4462784.html
基本数据类型与对象的差别
基本数据类型不是对象,也就是使用int、double、boolean等定义的变量、常量。
基本数据类型没有可调用的方法。
eg: int t = 1; t. 后面是没有方法滴。
Integer t =1; t. 后面就有很多方法可让你调用了。
自动拆箱和装箱场景
//装箱 Integer num = 10; //拆箱 int num1 = num;
自动拆箱有个很典型的用法就是在进行运算的时候:因为对象时不恩直接进行运算的,而是要转化为基本数据类型后才能进行加减乘除
Integer num = 10; //进行计算时隐含的有自动拆箱 System.out.print(num--);
Integer的自动装箱
Integer i=100; Integer j=100; System.out.println(i==j); //true Integer i=200; Integer j=200; System.out.println(i==j); //false
Integer i=100; 编译器会自动将int类型常数100包装成Interger,采用的是Integer.valueOf(100);这个方法。
当-128=<i<=127的时候,返回的是IntegerCache中的数组的值;当 i>127 或 i<-128 时,返回的是Integer类对象。
很奇怪吧:这就归结于java对于Integer与int的自动装箱与拆箱的设计,是一种模式:叫享元模式(flyweight)
为了加大对简单数字的重利用,java定义:在自动装箱时对于值从–128到127之间的值,它们被装箱为Integer对象后,会存在内存中被重用,始终只存在一个对象
而如果超过了从–128到127之间的值,被装箱后的Integer对象并不会被重用,即相当于每次装箱时都新建一个 Integer对象
再看下面的例子:
Integer i3 = new Integer(100); Integer i4 = new Integer(100); System.out.println("i3==i4: "+(i3==i4));//显示false
为什么是false呢?
只有自动装箱才会用到上面的享元模式,而new出来的对象其实是直接在堆上开辟Integer对象,不会用到享元模式中的IntegerCache中的数组的值。
参考转载自以下文章,可结合原文查看:
/article/7049404.html
/article/4462784.html
相关文章推荐
- Java常用类包装类之自动装箱自动拆箱
- java 自动装箱与拆箱
- Java 自动装箱与拆箱(Autoboxing and unboxing)
- java基本数据类型与字符串之间的转换(基本数据类型、对象封装类、自动装箱、自动拆箱)
- Java自动装箱和自动拆箱
- 浅析Java自动装箱和拆箱
- JAVA自动装箱和拆箱功能是把双刃剑
- Java进阶(三十七)java 自动装箱与拆箱
- java - 增强for循环 - 自动装箱/拆箱 - 可变参数 - 静态导入
- Java中的自动装箱与拆箱
- Java中的自动装箱与拆箱
- Java自动装箱和自动拆箱源码分析
- 说说java的自动装箱(autoboxing)和拆箱(unboxing
- Java中自动装箱和自定拆箱的用法
- Java_语法基础_自动装箱拆箱及易考细节
- [疯狂Java]面向对象:基本类型的包装器类型、自动装箱/拆箱、包装器类型大小/相等比较
- 【装箱拆箱】java自动 深入剖析
- JAVA——包装类的自动装箱和拆箱
- java自动装箱和拆箱
- Java笔记(8)-泛型、链表、LinkedList<E>、Iterator迭代器、Collections类方法、堆栈、HashMap<K,V>、TreeSet<E>、自动装箱和拆箱