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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨庆雷 中级黑马   /  2014-8-13 20:55  /  25685 人查看  /  42 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨庆雷 于 2014-8-13 23:43 编辑

我们已经知道了 String str = new String("abc");是创建了两个对象
1, String s="a"+"b"+"c"+"d"创建了几个对象(假设之前串池是空的)
2,StringBuilder sb = new StringBuilder();
String a = "a";
String b = "b";
String c = "c";
String d = "d";
String s = a+b+c+d;  这句话创建了几个对象
StringBuilder sb = new StringBuilder();
sb.append("a").append("b").append("c").append("d");这句话创建了几个对象

-------------------------------------------------------------------------------------------
答案是  7   3    0

第一题:“a”“b”“c”“d” “ab”“abc”“abcd”
第二题: “ab”“abc”“abcd”
第三题:因为a”“b”“c”“d”在串池中已经存在,不会创建对象,并且StringBuilder添加字符串的时候跟String
是不一样的,StringBuilder是不会创建对象的(所以说我们在增加字符串长度的时候尽量用StringBuilder,这样会少创建对象,节省资源,提高效率)
所以是0个对象

点评

楼主怎么还不修改答案以免误导他人  发表于 2014-8-14 17:05
第一题的答案是错的,只有一个对象"abcd"  发表于 2014-8-13 23:51

42 个回复

倒序浏览
David.L 发表于 2014-8-13 23:42
什么时候要数对象?

比如说我们接收到了100W条字符串(不要觉得不可能),需要把他们合成一个字符串,你会怎么办?你会用String还是StringBuilder,你如果不知道上面这个帖子的原理  你就只能蒙一个方法,而蒙错的结果就是:你的程序效率会很低。
回复 使用道具 举报
icris 发表于 2014-8-14 00:12
原来真的有答案…
第一题是错的,只有一个,编译器就是干这个的
第三题看你的意思是跟2连着的,你怎么解释 ...

最后是只存在一个 但是过程中确创建了7个 ,“a”“b““c”不会凭空而来   其他的没有引用的指向,被收回

点评

垃圾回收是运行时的事情。。。编译器没这功能  发表于 2014-8-14 00:27
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马