String str = new String (“hello”) ;
str += “world” ;
请教:创建了哪5个对象?其中String str = new String (“hello”) ;创建了2个对象,另外3个对象是怎么创建的?
 
另外对于StringBuffer st=new StringBuffer("abc");
如果执行了:st.append("def");是否会修改字符串池中的对象?

解决方案 »

  1.   

    类似于这样
    String str = new String (“hello”) ;
    str += “world” ; 
    //这句相当于 
    Strign strTemp="world";
    str+="world";
      

  2.   


    类似于这样
    String str = new String (“hello”) ;
    str += “world” ;
    //这句相当于
    Strign strTemp="world";
    str+=strTemp;
      

  3.   

    string的"+"操作,实际上是又创建了对象"world"一个str+"world"一个str又一个
    而stringbuffer是创建了一个对象,append操作是在此对象上在追加字符串
      

  4.   

    本人理解:
     第三个是“word”在池中建一个,第四个是“hello”与“word”合在一起的“helloword”又返回一个新的对象str,第五个是“helloword”在池中的创建的对象
     StringBuffer中的append方法不会修改池中的对象,只是修改在堆中的st对象
      

  5.   

    除了"world"这个对象,另外两个对象应该是在用 += 方法的时候,String类的实例长度是不变的,要想实现连接必须在创建一个长度更大的对象(第四个),把现有的str拷贝到里面,然后再把"world"拷贝进去,最后把新的字符串地址赋给str.第五个对象我也想知道,期待高手哦
      

  6.   

    首先第一句就不讲了,是个懒得掉渣的问题了。
    关于st+=“world”其实就是str=str+"world",而这里因为str是个变量,所以java编译器不做优化处理,所以首先看到str已经在string pool中有其对象的引用,所以不创建,但是对于world,在string pool中没有,所以被intern到string pool中(一个对象),然后是str+“world”这个连接以后的对象在heap上创建了一个,并且在string pool也有一个,所以一共是3个,加上之前的两个就是5个了~~~,
      

  7.   

    对于String str = new String (“hello”) ; 首先str在stack区,然后在heap创建一个对象,str指向它,同时在data区创建字符常量hello
    对于str += “world” ;因为是String类,所以每次在后面加上字符串都是重新创建一个新的对象,同时也在data区创建字符常量world
    我想应该是这五个吧,个人见解,请指教 
      

  8.   


    答:
    1) 4个.
    String str = new String (“hello”) ; 这一句不用说了,是2个.str += “world” ; 这一句呢? 2个.
    哪2个?第一个当然是:"word"了.另一个呢?
    str += “world” 这一句,JAVA编译程序是按:
       str=new StringBuilder(str).append("word").toString();
    进行生成代码的.
    因此:第4个对象是由toString()中new String(...)产生的.结论:4个2)不会.
      

  9.   

    我觉得是这样
    String str = new String (“hello”) ;
    str += “world” ; 
    hello与world在字符串池中创建两个对象
    然后new在heap中创建一个对象
    然后str += “world” ; 在创建一个对象
    同意楼上的4个对象。
    2)不会. 
      

  10.   

    应该是5吧
    hello 是一个
     String (“hello”) ; 又是一个new String (“hello”)又是一个
    String str又是一个
    str += “world”又是一个
    2)不会
      

  11.   

    str += “world”
    对于相同内容的字符串对象在池中并不会创建另一对象。
      

  12.   

    1)4个分别是"hello"
    "world"
    new java.lang.String
    new java.lang.StringBuilder
    2)不会修改字符串池中的对象,字符串池对象没变。
    分别是"abc"和"def";