------- android培训、java培训、期待与您交流! ----------
对基本数据的自动拆装箱及享元设计模式的知识总结都在代码注释里面了:
代码以及注释:
public class AutoBox
{
public static void main(String[] args)
{
//自动装箱,自动把一个基本数据类型装成一个Integer对象再赋给引用变量
Integer iobj = 3;
//自动拆箱,Integer对象不支持加法,自动把它转换成基本数据类型再进行加法运行。
System.out.println(iobj + 13);
/*
* 这两个基本数据类型经过自动装箱成Integer对象后,是不是同一个对象呢? 是同一个对象!
* 对于这些基本数据类型的整数,要装箱成Integer对象的时候,如果这个数字在一个字节之内 (-128 - 127)
* 一旦把这个数字装箱成Integer对象之后,就会把它缓存起来,放在缓冲池里面。下次再把一个整数装箱成Integer
* 对象的时候,先看缓冲池里面有没有,有的话,直接从缓冲池里面拿那个整数。这样节省了内存空间。因为比较小的整数会
* 经常用到,出现的频率很高,如果一出现就把它装箱成一个新的对象的话,就会产生很多对象。就占用更多的内存资源。
* 这些对象本来就是不怎么经常改变的,对象又很小,并且大家都是用它,并且不改变他的数据,没有必要每一个数字都对应一个对象。
* 这是一种设计模式。是享元模式
*
* 享元模式:比如在Word文档里面写字母,如果每写一个字母都在内存中产生一个对象的话,那么就会产生很多个对象
* 而这其中很多字母都是多次出现,高频率的重复。那么,就可以用到享元模式,把多个相同字母封装成一个对象,只是控制这个对象的显示方法的参数
* x、y坐标不一样即可,比如说 i.disPlay(x, y)调用disPlay方法时,不同位置的对象传入不同的x、y坐标,控制他们的显示位置不一样即可。
*
* 还有电脑里面很多图标都是一样的,也可以用享元模式,多个图标是同一个对象,只是调用对象的显示方法的时候,传入的参数x、y坐标不一样即可。
* pic.disPlay(x, y);不同的图标对象,他们的 x、y坐标不一样,显示的位置也不一样。
*
* 享元模式 flyweight
*
* 什么叫享元模式 :有很多个小的对象,他们有很多属性相同,那么就把他们变成一个对象。那些不同的属性变成方法的参数传入,称之为外部状态。
* 相同的属性称之为这个对象的内部状态。
* */
Integer i1 = 13;
Integer i2 = 13;
System.out.println(i1 == i2); //true是同一个对象
//如同这两个对象,是两个不同的对象。
String s1 = new String("abc");
String s2 = new String("abc");
System.out.println(s1 == s2);//false不是同一个对象
//调用Integer的静态方法将两个基本数据类型的整数封装成Integer对象,他们也是同一个对象
Integer i3 = Integer.valueOf(3);
Integer i4 = Integer.valueOf(3);
System.out.println(i3 == i4);
}
}