类 String
字符串(String)对象一旦创建,其内容不能再被修改 (read-only)
类 StringBuffer
StringBuffer 对象的内容是可以被修改的
除了字符的长度之外,还有容量的概念
通过动态改变容量的大小,加速字符管理
这段话是什么意思?

解决方案 »

  1.   

    String str = "aaaa";
    str = str + "bbb";看似乎变了,可是在内存里  "aaaa" 还是存在着.他是不变的.
    变的是在内存里又重新划分了个区域存放 "aaaabbb" ,然后 str 指向 "aaaabbb".
    StringBuffer sb = new StringBuffer("aaaa");
    sb.append("bbb");这个先在内存里划分了快区域存放 "aaaa" , 当 sb.append("bbb"); 时, "aaaa" 变成了 "aaaabbb"
      

  2.   

    说得明白些,举个例子:
    String str = "aaa";
    str = str + "bbb";
    str = str + "ccc";
    str = str + "ddd";这个时候内存(堆)里存放着 "aaa" , "aaabbb" , "aaabbbccc" , "aaabbbcccddd"; StringBuffer sb = new StringBuffer("aaa");
    sb.append("bbb");
    sb.append("ccc");
    sb.append("ddd");这个呢内存(堆)里只存放着最终的结果: "aaabbbcccddd" .
    就耗掉的内存来说 StringBuffer 小多了。所以当字符串经常变化时推荐使用 StringBuffer
      

  3.   

    查找关键字immortable,不可变对象其他常见的还有Boolean, Character, Long, Integer, BigDecimal等
      

  4.   

    shine333,
    boolean也是不可变的?好像编程经常用到boolean变量被改变的情况。
      

  5.   

    String str = "abc";相当于用一个变量(str)指向一个String对象("abc"),对象是immutable(不可变的),但变量可以指向另一个对象。。所以就有 str = str + "zqw";
    Java会创建一个新的String对象来保存结果,就是"abczqw",但原来的String对象"abc"并没有改变
      

  6.   

    你对String做的操作都会创建一个新的对象,你的对象的引用指向了新的对象,而原来的则编程了垃圾,等待回收
      

  7.   

    String str = "aaaa";
    str = str + "bbb";内存里存在三块区域“aaaa”、“bbb”、“aaabbb” 直到jvm
      

  8.   

    我说的是java.lang.Boolean类,而不是原生类型booleanthanks,immutable not immortableJDK1.5 的java.lang.String的类注释
    /**
     * The <code>String</code> class represents character strings. All
     * string literals in Java programs, such as <code>"abc"</code>, are
     * implemented as instances of this class.
     * <p>
     * Strings are constant; their values cannot be changed after they
     * are created.
      

  9.   

    经常变化的string,最好用stringbuffer,才不会产生垃圾
      

  10.   

    你String 一个变量后,在堆中建立了一个不可以改变的对象,同时在栈里产生一个指向这个对象的句柄。
    当你改变这个变量的值后,JVM在堆中会建立一个新的对象,同时把栈里的句柄指向新的对象。就这个意思。
    最重要的是,旧的对象此时是不被清除的。。所以你频繁改变变量的值时,会产生很多垃圾对象,解决办法就是用stringbuffer。