黑马程序员技术交流社区

标题: 享元模式与String对象 [打印本页]

作者: 李蛟龙    时间: 2012-4-26 00:06
标题: 享元模式与String对象
今天宿舍的人突然谈起String类的对象的创建原理,利用到了缓冲池,第一次创建对象时
那么String是否像integer利用了享元模式呢?
作者: 奥特曼爱小怪兽    时间: 2012-4-26 00:36
本帖最后由 徐晓磊 于 2012-4-26 00:38 编辑

我的理解是,享元模式是对内存缓存区内容得重复使用,对相同内容不在创建,而是使用同一份。
String 类型对象创建的时候,如果该引用对应的字符串在缓存区存在,那么缓存区也一样不会重复创建,而是使用同一份。
但是与Integer不同的是,String对象不存在自动装箱与拆箱,所以在比较两个String对象的时候,依然比较的的是内存地址,而不是对象中存的字符串。所以对于下面的使用
String str1 = new String("abc");
String str2 = new String("abc");
str2 == str2  是flase


所以String类应该也是使用了享元模式,但是由于咩有自动拆箱和装箱,因此没有Integer那样比较数值时候能够返回true

作者: 周海诚    时间: 2012-4-29 14:16
String的设计,其实就是用到了享元模式。个人理解.
做个测试:
String c="Hello";
String d="Hello";
System.out.println(c==d);
结果为TRUE。果真如此,对这种设计理解也更深入了。
然后再做个测试:
String a=new String("Hello");
String b=new String("Hello");
System.out.println(a==b);
结果为Fasle




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2