享元设计模式
Integer a = -129;
Integer b = -129;
System.out.println(a==b);
这个代码会输出false,
Integer a = 126;
Integer b = 126;
System.out.println(a==b);
这个输出true。
这个是为啥呢?
其实这就涉及到了享元设计模式,运行时Java虚拟机将-128~127(一个字节大小)等一些小对象在内存里面存了一份,而在代码运行时,虚拟机先到内存里面看下有没有此对象,如果有就不在创建了,直接用内存里面已有的对象。
什么是享元设计模式?
通俗的讲是:
有很多个小的对象,他们有很多的相同的属性,
把相同的属性变成一个对象,
那些不同的属性变成方法的参数,
称为外部状态
那些相同的属性称为内部状态
再举个很简单的例子:
比如说(这里引用GOF书中的例子)一个文本系统,
每个字母定一个对象,那么大小写字母一共就是52个,
那么就要定义52个对象。如果有一个1M的文本,
那么字母是何其的多,如果每个字母都定义一个对象那么内存早就爆了。
那么如果要是每个字母都共享一个对象,那么就大大节约了资源。