Java中的享元(flyweight)设计模式

问题:
如果利用java5自动装配特性定义两个对象:

Integer i1 = 13;
Integer i2 = 13;

那么,这两个对象是不是同一个对象呢?
System.out.print(i1==i2);
结果是true,还是false?

如果这样定义:
Integer i1 = 137;
Integer i2 = 137;
结果又是什么?

答案:第一种定义的结果是true,而第二种的结果则是false。

原因是这样的,如果这个数字在一个字节之内,就是-128~127之间,java会认为这些对象占用资源少,使用的频率可能会很高,所以采用了享元设计模式进行处理。

结论:对于一个小的整数(1个字节内),装箱之后的对象是同一个。

享元设计模式:有很多个小的对象,它们之间有相同的属性,就把这些对象定为一个对象。它们之间相同的属性称为内部状态,而它们之间不相同的属性可以定义为方法的参数, 称之为外部状态。

思考:设计模式不一定很复杂,有时候也会很简单,但它仍然是一种经典的模式。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值