jdk1.5新特性4之自动装箱和自动拆箱与享元模式

简介:

 

一 基本概念

1 装箱

把基本类型用它们相应的引用类型包装起来,使其具有对象的性质。如int——>Integer,float——>Float。

自动装箱

Integer a = 100,编译器调用的是static Integer valueOf(int i)

              

2 拆箱

和装箱相反,将引用类型的对象简化成值类型的数据

自动拆箱

int b = new Integer(100);
int c = a +2;

 


二 是否相等


例一
Integer a = new Integer(100);
Integer b = 100;
System.out.println(a == b);
false,很好理解,b的值在编译时就确定下来了,而a是分配一块堆给它,地址当然不等


例二
Integer a = new Integer(100);
Integer b = new Integer(100);
System.out.println(a == b);
false,不解释


例三
Integer a = 100;
Integer b = 100;
System.out.println(a == b);
true,java为了提高效率,IntegerCache类中有一个数组缓存了值从-128到127的Integer对象。如果i的值是[-128,127]时,会直接从这个缓存中返回一个对象,否则就new一个Integer对象。类比String的驻留池。
 


例四
Integer a = 128;
Integer b = 128;
System.out.println(a == b);
false,解释见例3


例五
Integer a = Integer.valueOf(100);
Integer b = 100;
System.out.println(a == b);
true

 

例六
Integer a = Integer.valueOf(128);
Integer b = 128;
System.out.println(a == b);
false

 


三 享元模式

享元模式(Flyweight Pattern)是一种软件设计模式。它使用共享物件,用来尽可能减少内存使用量以及分享资讯给尽可能多的相似物件;它适合用于当大量物件只是重复因而导致无法令人接受的使用大量内存。通常物件中的部分状态是可以分享。常见做法是把它们放在外部数据结构,当需要使用时再将它们传递给享元。正如我们例三展示的。

 

参考博客
http://www.cnblogs.com/wangchenyang/archive/2012/02/01/2334760.html
http://baike.baidu.com/view/6143765.htm

 

 

目录
相关文章
|
1月前
|
Java 编译器
Java中的自动装箱和拆箱
Java中的自动装箱和拆箱
|
1月前
|
存储 Java
Java面向对象之——包装类
Java面向对象之——包装类
|
7月前
|
Java 编译器
Java自动装箱和拆箱
Java自动装箱和拆箱
32 0
|
9月前
|
Java 编译器 测试技术
【JavaSE专栏6】Java 基本类型转换、包装类、自动装箱、自动拆箱
【JavaSE专栏6】Java 基本类型转换、包装类、自动装箱、自动拆箱
|
11月前
|
缓存 Java
JVM - 基本类型的包装类和对象池
JVM - 基本类型的包装类和对象池
52 0
|
IDE Java 编译器
Java中自动装箱和拆箱
装箱(Boxing),也称为包装(Wrapper),是在对象中放置原语类型(primitive type)的过程,以便原语(primitive)可以作为引用对象使用。 这里的`primitive type`就是Java里面的基本类型,所有的基本类型都有一个与之对应的类。例如,Integer类对应基本类型int。 通常,这些类称为包装器(wrapper)。这些对象包装器类拥有很明显的名字:Integer、Long、Float、Double、Short、Byte、Character、Void和Boolean(前6个类派生于公共的超类Number)。
|
存储 缓存 安全
解释一下自动装箱和自动拆箱
解释一下自动装箱和自动拆箱
135 0
|
Java
Java 自动拆箱装箱原理
Java 自动拆箱装箱原理
99 0
Java 自动拆箱装箱原理
|
缓存 Java 编译器
Java中的自动装箱与拆箱
Java中的自动装箱与拆箱
141 0