一共创建了几个对象。关于String

防空洞 2009-06-22 10:06:36
String s="Fred";
s=s+"47";
s=s.substring(2,5);
s=s.toUpperCase();
How many String objects will be created when this method is invoked?
...全文
49 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Lena-Yang 2009-06-22
  • 打赏
  • 举报
回复
一共产生了5个对象,2个在编译期产生:"Fred "和 "42 "
问题中的代码如果是某方法体,方法被调用时产生3个对象:s=s+ "47 ", s=s.substring(2,5)及s=s.toUpperCase()


题目如下:
public String makinStrings(){
String s= "Fred ";
s=s+ "42 ";
s=s.substring(2,5);
s=s.toUpperCase();
return s.toString();
}
How many String objects will be created when method is invoked?
A.1
B.2
C.3
D.4
E.5
F.6

答案给的是C,我不太明白,请高手指点,谢谢了!



String类是final的,可以看成常量,所以 "Fred "和 "42 "其实在编译期已经存在,而正因为String是final的,所以String类的操作又都回产生新object

所以s=s+ "42 ", s=s.substring(2,5)及s=s.toUpperCase()均会产生新的String object

s.toString()返回本身,不存在新建object的问题

对象一共产生五个,其中两个在编译时创建在pool中:“Fred”、“42”;还有由于String在java中是比较特殊的,被定义为final类型,即不可变的类型,因此只要每对String做一次修改就会产生一个新的临时变量。所以在s被修改时又产生了三个,为s=s+ "42 ";s=s.substring(2,5);s=s.toUpperCase();
而题目是问方法被调用时所产生的对象个数,应该为后面的三个!!!
福清仔 2009-06-22
  • 打赏
  • 举报
回复
4个吧,上面的对象都是在常量池创建对象,MS没有在堆中创建对象哟
让爱延续 2009-06-22
  • 打赏
  • 举报
回复
five
Jinxp 2009-06-22
  • 打赏
  • 举报
回复
应该是5个
Lena-Yang 2009-06-22
  • 打赏
  • 举报
回复
5个

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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