public String makinStrings()
{
String s = "Fred";
s = s + "47";
s = s.substring(2, 5);
s = s.toUpperCase();
return s.toString();
}
How many String objects will be created when this method is invoked?
我认为有"Fred" "47" "Fred47" "ed4" "ED4" 这5个对象被创建,但是为什么答案是选3个对象被创建?是不是答案错了啊
{
String s = "Fred";
s = s + "47";
s = s.substring(2, 5);
s = s.toUpperCase();
return s.toString();
}
How many String objects will be created when this method is invoked?
我认为有"Fred" "47" "Fred47" "ed4" "ED4" 这5个对象被创建,但是为什么答案是选3个对象被创建?是不是答案错了啊
String s = "Fred";
s = s + "47";
return s.toString();1,3两句不用说了,
第二句等号右边的s是新建的,和47相连后,把它的引用(即指针地址)赋给了等号左边的s(即String s = "Fred";这句创建的s)s = s.substring(2, 5);
s = s.toUpperCase();
这两句也一样,只是引用改变了
剩下那两个是在现有对象的基础上改变的。。不算创建的。。
String s = "Fred";//"Fred"常量对象
s = s + "47";//"47"常量对象,s+"47"使用一个StringBuffer来完成加法操作,StringBuffer最后转为一个新的String。
s = s.substring(2, 5);//substring函数最后会有一个new String操作,具体可以看JDK源码。
s = s.toUpperCase();//同上
return s.toString();//return this;没有新对象不过"Fred"和"47"好像是在常量池中建的对象,不知道算不算代码中创建的。如果不算的话就是3个。
楼主的想法没错,答案错了。zhxjcooler说的完全不对,不用管他。
String s = "Fred";//"Fred"常量对象
s = s + "47";//"47"常量对象,s+"47"使用一个StringBuffer来完成加法操作,StringBuffer最后转为一个新的String。
s = s.substring(2, 5);//substring函数最后会有一个new String操作,具体可以看JDK源码。
s = s.toUpperCase();//同上
return s.toString();//return this;没有新对象不过"Fred"和"47"好像是在常量池中建的对象,不知道算不算代码中创建的。如果不算的话就是3个。
s指向了新对像.Fred等成为垃圾!