自动装箱与拆箱------->引出享元模式
2014-05-23 12:53
155 查看
装箱:
把基本类型 用它们相应的引用类型 包装起来,使其具有对象的性质。(基本类型
----》 对象)
Integer i1 = 3;
拆箱:
将引用类型的对象 简化成 值类型的数据。
(对象 ----》 基本类型)
System.out.println(i1 + 4); //7
此时 i1 是 Integer对象,4 是基本类型,相加时,则i1 自动拆箱成int类型 + 4 =7。
------------------------------------------------------------------------------------------------------------------------------
延伸:
至于i4==i5
i6==i7 为什么结果不一致呢。
当小于1字节的int类型,-128~127
Integer i4 = 10; int类型的10 装箱成Integer对象,则会将10缓存在池中,
Integer i5 = 10; 当下次再次用到10装箱成Integer对象时,就会从池中获取10封装成相同的对象。
目的:节省了内存空间。因为像这种 小于1字节的数据,会经常用到,就会存在池中,如果每用到1个数据,就去开辟一个空间。将会极大浪费内存空间。没必要 每个数据对应一个对象。这就是一个设计模式:享元模式 flyweight。
很多对象都用的是相同的数据,没必要复制重复的数据,浪费空间。
比如:26英文字母,要是没输入一个字母,都生成一个字母对象,则浪费空间。所以只需要生成26个对象。
在windows中有很多文件夹图标,也是用的同一个图标。
(享元模式):有很多小的对象,具有很多相同的属性,把它们变成一个对象,称之为内部状态。,不同的(变化的)属性,变成方法的参数,称之为外部状态。test(int x,int
y) .x.y就是变化的
把基本类型 用它们相应的引用类型 包装起来,使其具有对象的性质。(基本类型
----》 对象)
Integer i1 = 3;
拆箱:
将引用类型的对象 简化成 值类型的数据。
(对象 ----》 基本类型)
System.out.println(i1 + 4); //7
此时 i1 是 Integer对象,4 是基本类型,相加时,则i1 自动拆箱成int类型 + 4 =7。
------------------------------------------------------------------------------------------------------------------------------
延伸:
class Test { public static void main(String[] args) { String s1 = new String("abc"); String s2 = new String("abc"); Integer i2 = new Integer(10); Integer i3 = new Integer(10); Integer i4 = 10; Integer i5 = 10; Integer i6 = 137; Integer i7 = 137; System.out.println(s1==s2); //1、false System.out.println(i2==i3); //2、false System.out.println(i4==i5); //3、true System.out.println(i6==i7); //4、false } } </span>对于这个例子,s1==s2 i2==i3 倒好理解,这4个对象都是new的对象,==比较的是引用地址,所以肯定是不相等的。
至于i4==i5
i6==i7 为什么结果不一致呢。
当小于1字节的int类型,-128~127
Integer i4 = 10; int类型的10 装箱成Integer对象,则会将10缓存在池中,
Integer i5 = 10; 当下次再次用到10装箱成Integer对象时,就会从池中获取10封装成相同的对象。
目的:节省了内存空间。因为像这种 小于1字节的数据,会经常用到,就会存在池中,如果每用到1个数据,就去开辟一个空间。将会极大浪费内存空间。没必要 每个数据对应一个对象。这就是一个设计模式:享元模式 flyweight。
很多对象都用的是相同的数据,没必要复制重复的数据,浪费空间。
比如:26英文字母,要是没输入一个字母,都生成一个字母对象,则浪费空间。所以只需要生成26个对象。
在windows中有很多文件夹图标,也是用的同一个图标。
(享元模式):有很多小的对象,具有很多相同的属性,把它们变成一个对象,称之为内部状态。,不同的(变化的)属性,变成方法的参数,称之为外部状态。test(int x,int
y) .x.y就是变化的
相关文章推荐
- jdk1.5新特性4之自动装箱和自动拆箱与享元模式
- jdk1.5新特性4之自动装箱和自动拆箱与享元模式
- Java基础加强<二>可变参数、增强for循环、基本类型的自动拆箱与装箱、枚举
- 《黑马程序员》自动装箱拆箱 (享元模式)
- Integer类自动装箱、拆箱与享元模式
- 1.4--1.5.4 泛型类A<Integer>与接口Interface A<Integer>、自动装箱/拆箱Integer->int、菱形运算符<>、数组协变、通配符?
- 黑马程序员_加强11_基本数据类型的自动拆箱与装箱+享元模式
- JAVA JDK1.5新特性<静态带入、可变参数、增强For循环、自动装箱及自动拆箱>
- 黑马程序员_ java高新之自动装箱与拆箱(引入设计模式:享元模式)
- 黑马程序员<Java 1.5新特性>静态导入、增强for、可变参数、自动装箱拆箱、枚举
- Java深入(高新技术)(二):开发环境、静态导入、可变参数、增强for循环、基本数据类型的自动拆箱与装箱、享元模式
- 基本数据的自动拆箱与装箱及享元模式
- 黑马程序员——Java1.5新特性之享元模式、增强for循环、可变参数、静态导入、自动装箱和拆箱
- Integer类自动装箱、拆箱与享元模式
- 自动装箱拆箱_享元模式
- Java笔记(8)-泛型、链表、LinkedList<E>、Iterator迭代器、Collections类方法、堆栈、HashMap<K,V>、TreeSet<E>、自动装箱和拆箱
- JAVA中的自动装箱/拆箱
- 先码后看 java的自动装箱、拆箱 侵立删
- Java高新技术【1】 (静态导入-可变参数-增强for循环-基本数据类型的自动拆箱与装箱)
- Java自动装箱/拆箱 是什么意思