题目如下:
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,我不太明白,请高手指点,谢谢了!

解决方案 »

  1.   

    1, Fred42
    2, ed4
    3, ED4
      

  2.   

    1 "Fred"
    2 "42"
    3 "Fred42"
    其他操作不会产生新对象。
      

  3.   

    我不同意zjunzhang(鱼游壕上)的观点,"Fred" 和 "47" 在编译期就会放入pool里面,所以invoke这个method的时候,不会去创建他们而s=s+"42", s=s.substring(2,5)及s=s.toUpperCase()均会产生新的String object
      

  4.   

    打错了,是"Fred" 和 "42" 在编译期就会放入pool里面
      

  5.   

    同意zjunzhang(鱼游壕上) 的说法
      

  6.   

    String类是final的,可以看成常量,所以"Fred"和"42"其实在编译期已经存在,而正因为String是final的,所以String类的操作又都回产生新object所以s=s+"42", s=s.substring(2,5)及s=s.toUpperCase()均会产生新的String objects.toString()返回本身,不存在新建object的问题
      

  7.   

    zjunzhang(鱼游壕上)和wenwenwen112(三万英尺)不要误人子弟哦,呵呵
      

  8.   

    我认为da11393的理解正确,
    zjunzhang(鱼游壕上)的理解是错误的
      

  9.   

    原来"Fred"和"42"是在编译期就产生存在的啊,
    问题:那是不是说一共有5个String对象啊?
      

  10.   

    本人理解
    "Fred"和"42"是基本类型,不算的
      

  11.   

    对,我认为一共有5个对象
    分别为:
    Fred
    42
    Fred42
    ed4
    ED4
      

  12.   

    编译期产生2个
    method被调用时产生了3个
      

  13.   

    如果是 String s=new String("Fred")的话那就是5个对象了
      

  14.   

    你知道string的不变性。还要知道有一个字符串常量池。
      

  15.   

    对象一共产生五个,其中两个在编译时创建在pool中:“Fred”、“42”;还有由于String在java中是比较特殊的,被定义为final类型,即不可变的类型,因此只要每对String做一次修改就会产生一个新的临时变量。所以在s被修改时又产生了三个,为s=s+"42";s=s.substring(2,5);s=s.toUpperCase();
    而题目是问方法被调用时所产生的对象个数,应该为后面的三个!!!
      

  16.   

    推荐Sun java基础课程:
    http://www.elearning.gov.cn/elearning/user/findclass.do?method=courselist&categoryid=57982540b6cd11d993d0f770c0a83c70&id=2
      

  17.   

    感谢各位对此问题的关注与解答,由于分数不多,打算给一位仁兄,
    da11393(String[] args)解释多次,而且很清楚,故给分于你
    iwillrockyou(我为java狂~) 你的解释也很不错,可惜分数实在太少,不好意思啦~