讲下这个题

解决方案 »

  1.   

    我的理解:
    String s1=“hello”
    在栈中新增s1引用,此时堆中没有“hello”,所以在堆中新增字符串“hello”;
    String s2=s1.subString(2,3)
    在栈中新增s2引用,同时算出subString(2,3)为“l”,此时堆中没有“l”,所以在堆中新增字符串“l”;
    String s3=s1.toString()
    在栈中新增s3引用,同时算出s1.toString()为“hello”,此时堆中含有字符串“hello”,所以在堆中新增字符串“hello”;
    String s4=new StringBuffer(s1).toString()
    在栈中新增s4引用,StringBuffer(s1).toString()为“hello”,因为采用了new的方式,因此在堆中新增了字符串“hello”;
      

  2.   

    我的理解:
    String s1=“hello”
    在栈中新增s1引用,此时堆中没有“hello”,所以在堆中新增字符串“hello”;
    String s2=s1.subString(2,3)
    在栈中新增s2引用,同时算出subString(2,3)为“l”,此时堆中没有“l”,所以在堆中新增字符串“l”;
    String s3=s1.toString()
    在栈中新增s3引用,同时算出s1.toString()为“hello”,此时堆中含有字符串“hello”,所以直接指向对中的字符串“hello”;
    String s4=new StringBuffer(s1).toString()
    在栈中新增s4引用,StringBuffer(s1).toString()为“hello”,因为采用了new的方式,因此在堆中新增了字符串“hello”;
      

  3.   

    第一行一个。第二行的substring方法,你查看源码会发现,它会产生一个新的String对象。第三行,String类的toString方法返回它本身,所以不产生新对象。第四行,new StringBuffer(s1)是不产生新的String对象的,但是StringBuffer的toString方法会产生一个新的String对象,可参看源码。所以,会产生三个String对象。
      

  4.   

    http://www.blogjava.net/mirenxiaoxiao/archive/2010/10/18/335457.html