自动装箱、自动拆箱
// 自动装箱,例子:把一个基本数据类型装成一个Integer对象
Integer iobj = 3;
// 自动拆箱,例子:把Integer对象拆箱成基本数据类型
System.out.println(iobj + 12);
享元模式(Flyweight Pattern)
享元模式是一种软件设计模式。它使用共享物件,用来尽可能减少内存使用量以及分享资讯给尽可能多的相似物件;它适合用于只是因重复而导致使用无法令人接受的大量内存的大量物件。通常物件中的部分状态是可以分享。常见做法是把它们放在外部数据结构,当需要使用时再将它们传递给享元。
// 若数值在-128~127之间(一字节),则会将这些数值对象会缓存起来,使用的时候,直接使用已经存在的对象(享元模式)
Integer i1 = 10;
Integer i2 = 10;
// 输出i1、i2的内存地址
System.out.println("i1:"+System.identityHashCode(i1));
System.out.println("i2:"+System.identityHashCode(i2));
// 当数值大于127或小于-128时,则这些数值会创建新的对象,通过输出对象在内存中的地址来验证
Integer i3 = 128;
Integer i4 = 128;
System.out.println("i3:"+System.identityHashCode(i3));
System.out.println("i4:"+System.identityHashCode(i4));
Integer i5 = -129;
Integer i6 = -129;
System.out.println("i5:"+System.identityHashCode(i5));
System.out.println("i6:"+System.identityHashCode(i6));
以下是完整代码
public class AutoBox {
/**
* @param args
*/
public static void main(String[] args) {
// 自动装箱,例子:把一个基本数据类型装成一个Integer对象
Integer iobj = 3;
// 自动拆箱,例子:把Integer对象拆箱成基本数据类型
System.out.println(iobj + 12);
// 若数值在-128~127之间(一字节),则会将这些数值对象会缓存起来,使用的时候,直接使用已经存在的对象(享元模式)
Integer i1 = 10;
Integer i2 = 10;
// 输出i1、i2的内存地址
System.out.println("i1:"+System.identityHashCode(i1));
System.out.println("i2:"+System.identityHashCode(i2));
// 当数值大于127或小于-128时,则这些数值会创建新的对象,通过输出对象在内存中的地址来验证
Integer i3 = 128;
Integer i4 = 128;
System.out.println("i3:"+System.identityHashCode(i3));
System.out.println("i4:"+System.identityHashCode(i4));
Integer i5 = -129;
Integer i6 = -129;
System.out.println("i5:"+System.identityHashCode(i5));
System.out.println("i6:"+System.identityHashCode(i6));
}
}
// 运行结果
// 15
// i1:366712642
// i2:366712642
// i3:1829164700
// i4:2018699554
// i5:1311053135
// i6:118352462