A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李蛟龙 中级黑马   /  2012-4-26 00:06  /  2599 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

今天宿舍的人突然谈起String类的对象的创建原理,利用到了缓冲池,第一次创建对象时
那么String是否像integer利用了享元模式呢?

2 个回复

倒序浏览
本帖最后由 徐晓磊 于 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
回复 使用道具 举报
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
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马