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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨庆雷 中级黑马   /  2014-8-13 20:55  /  25546 人查看  /  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 个回复

倒序浏览
等你把答案写出来再告诉你
回复 使用道具 举报
坐等答案                                                                              
回复 使用道具 举报
1.String s="a"+"b"+"c"+"d"创建了几个对象  创建了7个对象
回复 使用道具 举报
创建了5个对象。
回复 使用道具 举报
象牙 发表于 2014-8-13 21:40
1.String s="a"+"b"+"c"+"d"创建了几个对象  创建了7个对象

貌似这是有问题的,求高手解释
回复 使用道具 举报
icris 中级黑马 2014-8-13 21:55:53
7#
String s="a"+"b"+"c"+"d" 这句的运算部分在编译时就完成了,运行时只有一个 "abcd" 对象
String s = a+b+c+d;  这句有 "ab", "abc", "abcd" 三个
sb.append("a").append("b").append("c").append("d"); 有 "a", "b", "c", "d" 四个字符串对象
如果中间的换成 sb.append(a).append(b).append(c).append(d); 不创建新对象
回复 使用道具 举报
创建了一个对象
回复 使用道具 举报
等着答案
回复 使用道具 举报
看看,,,。。。。
回复 使用道具 举报
坐等答案      
回复 使用道具 举报
我们已经知道了 String str = new String("abc");是创建了两个对象

这句话为啥和我理解的不一样呢?  我刚学基础视频,不喜勿喷。
我是这样理解的,String str 是在栈内存开辟空间,指向堆内存里new String("abc")这个对象,不应该只有一个对象么?~
回复 使用道具 举报
坐等答案
回复 使用道具 举报
学到了 不过问题好像满刁钻的
回复 使用道具 举报
ZYcoc0 发表于 2014-8-13 23:15
我们已经知道了 String str = new String("abc");是创建了两个对象

这句话为啥和我理解的不一样呢?  我刚 ...

我也是这么想的 怎么就2个了?:o
回复 使用道具 举报
icris 中级黑马 2014-8-13 23:29:15
16#
ZYcoc0 发表于 2014-8-13 23:15
我们已经知道了 String str = new String("abc");是创建了两个对象

这句话为啥和我理解的不一样呢?  我刚 ...

在 new String("abc") 之前,要有一个 "abc" 对象作为参数传进来啊,这个参数不可能是它自己啊
回复 使用道具 举报
小乖乖灬浩歌 来自手机 中级黑马 2014-8-13 23:38:41
17#
ZYcoc0 发表于 2014-8-13 23:15
我们已经知道了 String str = new String("abc");是创建了两个对象

这句话为啥和我理解的不一样呢?  我刚 ...

字符串本身会将出现的像“s”这样字符串常量放到常量池里面 具体位置好像在方法区 new String("a")的实质就是栈内存中得对象存放的是方法区常量池对应常量的地址
回复 使用道具 举报
David.L 来自手机 中级黑马 2014-8-13 23:42:21
18#
什么时候要数对象?
回复 使用道具 举报
nadax 中级黑马 2014-8-13 23:44:00
19#
我觉得应该是5个吧。因为每NEW一次会开辟一个新的内存空间,求大神指点。
回复 使用道具 举报
1, String s="a"+"b"+"c"+"d"创建了几个对象   创建了一个对象
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马