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

 

 

时间: 2024-12-23 14:29:17

jdk1.5新特性4之自动装箱和自动拆箱与享元模式的相关文章

jdk1.5新特性5之枚举之枚举类型的应用

  一 简单应用 package cn.xy.Enum; public enum TrafficLamp {  RED,GREEN,YELLOW; } TrafficLamp red = TrafficLamp.RED; System.out.println(red); System.out.println(red.name()); System.out.println(red.ordinal()); System.out.println(TrafficLamp.valueOf("YELLOW&

浅析自动装箱、自动拆箱

浅析自动装箱.自动拆箱 我们知道,在java中有基本类型和类类型,基本类型有:char.byte.short.int.double.float.long.boolean这8种,在需要将基本类型打包成对象来进行操作的时候,这时,就用到了打包这一操作,该操作的自动行为就叫做自动装箱.自动拆箱. package demo; public class IntegerDemo { public static void main(String[] args) { int data1=10; int data

JDK1.5新特性一览

"JDK1.5"(开发代号猛虎)的一个重要主题就是通过新增一些特性来简化开发,这些特性包括泛型,for-each 循环,自动装包/拆包,枚举,可变参数, 静态导入 .使用这些特性有助于我们编写更加清晰,精悍,安全的代码. 下面我们简单介绍一下这些新特性. 1.泛型(Generic) C++通过模板技术可以指定集合的元素类型,而Java在1.5之前一直没有相对应的功能.一个集合可以放任何类型的对象,相应地从集合里面拿对象的时候我们也不得不对他们进行强制得类型转换.猛虎引入了泛型,它允许指

JDK1.5新特性介绍

"JDK1.5"(开发代号猛虎)的一个重要主题就是通过新增一些特性来简化开发,这些特性包括泛型,for-each 循环,自动装包/拆包,枚举,可变参数, 静态导入 .使用这些特性有助于我们编写更加清晰,精悍,安全的代码. 下面我们简单介绍一下这些新特性. 1.泛型(Generic) C++通过模板技术可以指定集合的元素类型,而Java在1.5之前一直没有相对应的功能.一个集合可以放任何类型的对象,相应地从集合里面拿对象的时候我们也不得不对他们进行强制得类型转换.猛虎引入了泛型,它允许指

Java学习之自动装箱和自动拆箱源码分析

自动装箱(boxing)和自动拆箱(unboxing) 首先了解下Java的四类八种基本数据类型 基本类型 占用空间(Byte) 表示范围 包装器类型 boolean 1/8 true|false Boolean char 2 -128~127 Character byte 1 -128~127 Byte short 2 -2ˆ15~2ˆ15-1 Short int 4 -2ˆ31~2ˆ31-1 Integer long 8 -2ˆ63~2ˆ63-1 Long float 4 -3.403E38

装箱(boxing)和拆箱(unboxing)

1. 装箱(boxing)   用于把一个值类型转换为引用类型 int i = 20;object o = i; //隐式转换   2. 拆箱(unboxing)   将以前装箱的值类型转换回引用类型   int i = 20;object o = i;int j = (int)o;    

C#3.0新特性(三)-详说自动属性和匿名类型

写在前边: 不知道怎么的,上一篇说放到首页看看,今天来看才发现没有放上去,做事情还真不细心,改.改.改!其实,早知道C# 4.0都有了,但是连C# 3.0都还没有弄清楚,使用还是坚持这个系列,做完再写C# 4.0吧.技术前辈们肯定早都知道这些东西了,不过呢,我也只是学习,只是把我的学习同大家分享而已! 一.自动实现的属性 全称应该叫自动实现的属性(Auto-implemented properties),在上一篇中,给了简单的例子,说的是当属性访问器中不需要其他逻辑时,自动实现的属性可使属性声明

jdk1.5新特性1之静态导入

调用Math类的静态方法,每次都要写Math点方法. public static void main(String args) {  system.out.print(Math.max(3,6));  system.out.print(Math.min(3.6)); }   JDK1.5支持静态导入 import static java.lang.Math.max; public static void main(String args) {  system.out.print(max(3,6)

jdk1.5新特性2之动态参数列表

一 概念   Java类型后面三个点如(String... strs)是从Java1.5开始对方法参数支持一种新写法,叫可变长度参数列表,其语法就是类型后跟三个点,表示此处接受的参数为0到多个Object类型的对象或者是一个Object[].       二 例子   public class test {  public static void main(String[] args)  {   testVarchar("xy", "xy2", "xy3&