一道选择题,请大家来看看

johnsoncr 2007-12-16 08:18:49
Given:
11. public String makinStrings() {
12. String s = “Fred”;
13. s = s + “47”;
14. s = s.substring(2, 5);
15. s = s.toUpperCase();
16. return s.toString();
17. }
How many String objects will be created when this method is invoked?
A. 1
B. 2
C. 3
D. 4
E. 5
F. 6
这是SCJP的一道选择题。
为什么答案选C?
我觉得应该选E,5个boject分别为:Fred, 47, Fred47, ed4, ED4
大家觉得呢?
...全文
103 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
东东车 2008-03-07
  • 打赏
  • 举报
回复
其实我和你一样johnsoncr ...现在我还是不知道是选三个还是五个。希望考试的时候不会出现这种题目。阿门
fatfoxz 2007-12-19
  • 打赏
  • 举报
回复
to coolzyt
抱歉,是我说错了,好像我的表达能力越来越差了。
写个“”是分配内存的,但不是对象(虽然也有书上说是对象的),理由仍然是“对象一定是可以被引用的”,所以只有堆中字符串才是对象
fatfoxz 2007-12-19
  • 打赏
  • 举报
回复
String pool中的“Fred”虽然也占内存,但不能算是object,object是class的一个实例化,必须能够被“引用”,所以只有堆中的被s“引用”的才是object。
johnsoncr 2007-12-19
  • 打赏
  • 举报
回复
谢谢大家的回贴。现在我还是不知道是选三个还是五个。希望考试的时候不会出现这种题目。
yooooyiiiiiiiiii 2007-12-18
  • 打赏
  • 举报
回复
如果答案是c的话。

s = s.substring(2, 5);
15. s = s.toUpperCase();

这2句应该没有疑问吧?各一个String objects

那么应该是:
String s = “Fred”;
s = s + “47”;
这句话只产生了一个String objects罗。
s + “47”;

并没有再新产生一个String objects吧?只是在该String结尾添加上47罢了。
但一般不会如此使用(频繁添加新的字符串到原字符串中的话),而更提倡使用StringBuffer。
这个可能很多人误解了。

这样的话答案c没有问题。
return s.toString();
这个就不用说了吧。
notlogin 2007-12-18
  • 打赏
  • 举报
回复
我觉得也是5个诶…………
richard_2010 2007-12-18
  • 打赏
  • 举报
回复
mark,很郁闷,5个有理,3个也有理
coolzyt 2007-12-18
  • 打赏
  • 举报
回复
to fatfoxz
真搞笑, 写个“”就不分配内存?要是当前池里没有怎么办?
a1405 2007-12-18
  • 打赏
  • 举报
回复
都是这样String的题啊?说的我都累了,

String s = “Fred”; 这句产生了2个对象

先产生一个在String pool中,另一个在堆中。s指向的是堆中的对象。
fatfoxz 2007-12-18
  • 打赏
  • 举报
回复
其中

String s = “Fred”;
s = s + “47”;
s = s.toUpperCase();

三行都相当于new了String objects, 红字的s是被“new”出的对象。

因为String采用了共享内存的方案,所以当String的值改变时就相当于new了object,而s.substring(2, 5); 只是改变了读取原object的哪位而已,并不创建新的object。
“Fred”和“47”等,根本不是对象,并不是你在代码里写个“”,java就给你分配内存。
大家在读代码时要考虑的是内存状况,不能只看表面。

reanimation1 2007-12-18
  • 打赏
  • 举报
回复
应该是五个

觉得楼住的对
fatfoxz 2007-12-18
  • 打赏
  • 举报
回复
三个对象指:
12. String s = “Fred”;
13. s = s + “47”;
15. s = s.toUpperCase();
答案没有问题
东东车 2007-12-17
  • 打赏
  • 举报
回复
嘿嘿,看了老外和同胞还有,楼主的答案我觉得是正确的,我支持你楼主..
东东车 2007-12-17
  • 打赏
  • 举报
回复
看看,我们的同胞是怎么理解这道题的?

http://www.javaworld.com.tw/jute/post/view?bid=29&id=208311&sty=3&age=0&tpg=1&ppg=1#208311
东东车 2007-12-17
  • 打赏
  • 举报
回复
johnsoncr ,说说你是怎么想的,先不要看人家的理解...
东东车 2007-12-17
  • 打赏
  • 举报
回复
看看老外是怎么看这道题的吧..呵呵

http://saloon.javaranch.com/cgi-bin/ubb/ultimatebb.cgi?ubb=get_topic&f=24&t=042755

50,523

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧