String str ="hello"
  str +="world";
  
  此时的str还是不是原来那个?
  
  内存怎么分配的?

解决方案 »

  1.   

    肯定不是原来的那个了
    字符串是不可更改的对象
    对str运算后,对象已经变了
      

  2.   

    是新分配的.
    str += "world" 等同于
    str =(new StringBuffer().append(str).append("world")).toSting();
      

  3.   

    此时的str 应该是 “hello world”吧,内存分配就不太清楚了
      

  4.   

    现在是“hello world”
    str指向了“hello world”,内存是重新分配了
      

  5.   

    堆里2块空间 一个存放hello  一个存放hello world
    栈里还是那个引用变量str
      

  6.   

    str 存放的是hello在内存中存放的地址,在str+="world"  的时候,str重新存放的是指向hello world的内存地址!原理好像是这样的,str先找内存中有没有hello,没有则创建一个,并将他的内存地址给str,如果有则直接将内存地址给str,赋值的变化导致了类对象引用的变化,str指向了另外一个新对象!一点浅见,请指点
      

  7.   

    肯定不是原来的那个内存地址了,这时候系统会分配一个新的内存地址给str的
    如果你不想让系统分配新的内存地址的话那么建议你使用stringbuffer或者stringbuilder