您的位置:首页 > 职场人生

《黑马程序员》自动装箱拆箱 (享元模式)

2011-05-29 10:41 246 查看
Integer i=5;
Integer j=5;
System.out.println(i == j );

此时打印的结果是true;
但是如果改为:

Integer i=130;
Integer j=130;
System.out.println(i == j );

这时打印的结果是false;

解析:这时将每个int类型的数据自动装箱成为一个Integer对象。如果int类型的数据大小在-128~128之间(包含-128,不包含128)。此时自动装成的Integer对象,会放进缓存中。如果后面还有int类型的数据自动装箱成为Integer对象时,首先会在缓存中查找,如果数据相等就直接用缓存中的对象。否则会自动在缓存中新添一个对象。如果int类型的数据不在-128~128之间,此时会在内存中新建对象,此时每个对象的地址都是不同的。

升级:这里应用的是享元模式(flyweight)。适用:有大量重用的对象时,节省内存,加快运行速度。
注意:Integer.valueof()也是按照以上原理得到Integer对象
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: