自动装箱与拆箱引发的享元设计模式

/**
 * 自动装箱与拆箱
 */
public class Autoboxing {

	public static void main(String[] args) {
		Integer num1 = 20;			//自动装箱
		int num2 = new Integer(20);		//自动拆箱
		System.out.println(num2 == num1);	//true

		//-128~127之间的同一个Intege对象相比为true
		Integer num3 = 128;
		Integer num4 = 128;
		System.out.println(num3 == num4);	//false

		Integer num5 = -129;
		Integer num6 = -129;
		System.out.println(num5 == num6);	//false
	}
}

代码说明:

Integer num1 = 20;自动将int类型的整数20转换一个Integer对象,赋给num1;(装箱)

int num2 = new Integer(20);  自动将Integer对象的值20转换成int类型(拆箱)

在JDK5.0之前,这种方式是不能通过编译的,比如上述示例在JDK1.4只能通过new的方式创建Integer对象。

由自动装箱与拆箱引发的享元模式:

//存储-128~127之间的Integer对象
Integer num3 = 128;
Integer num4 = 128;
System.out.println(num3 == num4);	//false

Integer num5 = -129;
Integer num6 = -129;
System.out.println(num5 == num6);	//false

因为较小的整数用的频率比较广泛,所以JAVA虚拟机启动后将-128~127之间整数对像缓存起来,这样每次在使用-128~127之间的整数对象时不用频繁的创建,而是直接去缓存池里取,如果缓存池里存在该数值,就直接取出来,如果不存在,则创建一新的对象返回,这样一来即可节省内存资源。这种将常用或公共的数据缓存起来反复复用的方式,叫做享元模式。

以上只是个人的见解,如有不正确的地方,请前辈指教!

时间: 2024-12-28 22:45:04

自动装箱与拆箱引发的享元设计模式的相关文章

Java JDK之自动装箱和拆箱

基本数据(Primitive)类型的自动装箱(autoboxing).拆箱(unboxing)是自J2SE 5.0开始提供的功能.虽然为您打包基本数据类型提供了方便,但提供方便的同时表示隐藏了细节,建议在能够区分基本数据类型与对象的差别时再使用. autoboxing和unboxing 在Java中,所有要处理的东西几乎都是对象 (Object),例如之前所使用的Scanner是对象,字符串(String)也是对象,之后还会看到更多的对象.然而基本(Primitive)数据类型不是对象,也就是您

Java自动装箱与拆箱

  自动装箱与拆箱机制在实际使用中非常常见,不过也特别容易出错,博主在面对下面一道题的时候自信满满,可还是没有能够全对,所以写下这篇博文,给自己对自动装箱与拆箱机制做一下知识巩固,也给各位朋友做一下参考.   首先有这样一道题,给出下面代码的输出结果: public class AutoBoxing { public static void main(String[] args) { Integer a = 1; Integer b = 2; Integer c = 3; Integer d =

java基础:合法转换与自动装箱、拆箱

问题描述 java基础:合法转换与自动装箱.拆箱 Short y = 100; int z = y; 这两句代码编译正确,但为什么呢?是y先拆箱成short,然后合法转换成int吗? short y1 = 100; Integer z1 = y1; 而这两句代码编译报错,如果按照上面的逻辑,可以y1先合法转换int,然后自动装箱成Integer呀? 解决方案 涉及到隐式转换. 对非引用类型赋值的时候,对基本数据类型会进行自动拆箱,然后可以隐式转换为大类型: 如第一种. 而引用类型则是先装箱再赋值

JDK5.0新特性系列---1.自动装箱和拆箱

/**  * 基本类型的数据值可以直接赋给基本数据对象,基本数据的对象也可以直接赋给基本数据变量  * 在表达式中,基本类型的数据值可以和基本数据对象进行运算  * 基本数据类型的数组不能实现自动装箱和拆箱,即int[]不能当成Integer[]使用  */ /**  * 演示基本数据类型的自动拆箱和装箱  */ public class AutoBox {        /**整数类型的自动拆箱和装箱*/        public static void intAutoBox(){     

Java装箱和拆箱详解

自动装箱和拆箱问题是Java中一个老生常谈的问题了,今天我们就来一些看一下装箱和拆箱中的若干问题.本文先讲述装箱和拆箱最基本的东西,再来看一下面试笔试中经常遇到的与装箱.拆箱相关的问题. 以下是本文的目录大纲: 一.什么是装箱?什么是拆箱? 二.装箱和拆箱是如何实现的 三.面试中相关的问题 若有不正之处,请谅解和批评指正,不胜感激. 请尊重作者劳动成果,转载请标明原文链接: http://www.cnblogs.com/dolphin0520/p/3780005.html 一.什么是装箱?什么是

深入剖析Java中的装箱和拆箱

自动装箱和拆箱问题是Java中一个老生常谈的问题了,今天我们就来一些看一下装箱和拆箱中的若干问题.本文先讲述装箱和拆箱最基本的东西,再来看一下面试笔试中经常遇到的与装箱.拆箱相关的问题. 一.什么是装箱?什么是拆箱? 在前面的文章中提到,Java为每种基本数据类型都提供了对应的包装器类型,至于为什么会为每种基本数据类型提供包装器类型在此不进行阐述,有兴趣的朋友可以查阅相关资料.在Java SE5之前,如果要生成一个数值为10的Integer对象,必须这样进行: Integer i = new I

深入剖析Java中的装箱和拆箱(转)

自动装箱和拆箱问题是Java中一个老生常谈的问题了,今天我们就来一些看一下装箱和拆箱中的若干问题.本文先讲述装箱和拆箱最基本的东西,再来看一下面试笔试中经常遇到的与装箱.拆箱相关的问题. 以下是本文的目录大纲: 一.什么是装箱?什么是拆箱? 二.装箱和拆箱是如何实现的 三.面试中相关的问题 一.什么是装箱?什么是拆箱? 在前面的文章中提到,Java为每种基本数据类型都提供了对应的包装器类型,至于为什么会为每种基本数据类型提供包装器类型在此不进行阐述,有兴趣的朋友可以查阅相关资料.在Java SE

Java中的装箱与拆箱

在J2SE5.0后推出了自动装箱和拆箱的功能,以提高我们的开发效率,然而自动装箱和拆箱实际上是通过编译器来支持的(并非语言本身,或者说虚拟机),因而这种支持也隐藏了部分内部实质,再加上某些类的优化(比如Integer里面的缓存等,参看关于缓存节),就更加容易在特定的环境下产生问题,并且如果不知道原来还无法调试.以下先是简单的介绍了编译器对装箱和拆箱的实现,并根据实现简单介绍一下可能会遇到的几个问题. 装箱和拆箱实现 以下装箱和拆箱代码:        Object value = 10;    

Java中的装箱和拆箱深入理解_java

自动装箱和拆箱问题是Java中一个老生常谈的问题了,今天我们就来一些看一下装箱和拆箱中的若干问题.本文先讲述装箱和拆箱最基本的东西,再来看一下面试笔试中经常遇到的与装箱.拆箱相关的问题. 一.什么是装箱?什么是拆箱? 在前面的文章中提到,Java为每种基本数据类型都提供了对应的包装器类型,至于为什么会为每种基本数据类型提供包装器类型在此不进行阐述,有兴趣的朋友可以查阅相关资料.在Java SE5之前,如果要生成一个数值为10的Integer对象,必须这样进行: 复制代码 代码如下: Intege