class A {
  public static void intReplace(int x) {
    x = x + 5;
  }  public static void stringReplace(String text) {
    text = text.replace('j', 'l');
  }  public static void bufferReplace(StringBuffer text) {
    text = text.append("c");
  }  public static void main(String args[]) {
    int i=0;
    String textString = new String("java");
    StringBuffer textBuffer = new StringBuffer("java");
    stringReplace(textString);
    bufferReplace(textBuffer);
    intReplace(i);
    System.out.println(textString);
    System.out.println(textBuffer);
    System.out.println(i);
  }
}
为什么只有StringBuffer的值才会变!

解决方案 »

  1.   

    StringBuffer 不是不变类
    String是不变类
      

  2.   

    String类只是维护了内存中字符常量的地址。String str1=new String("1");
    String str2=new String("1");这时候str1和str2的reference都是一致的,都是指向内存中的同一字符串常量。String str1=new String("1");
    String str2=new String("2");
    这时候str1和str2的reference都是不一致的。这些常量在编译的时候就已经确定了。StringBuffer则是自己在维护一个字符串,所以可以进行修改。
      

  3.   

    class A {
      public static void intReplace(int x) {
        x = x + 5;
      }  public static String stringReplace(String text) {
        return text.replace('j', 'l'); // <- 对immutable对象,都要采取此种方式
      }  public static void bufferReplace(StringBuffer text) {
        text = text.append("c");
      }  public static void main(String args[]) {
        int i=0;
        String textString = "java"l// Never new String("java");!!!!!
        StringBuffer textBuffer = new StringBuffer("java");
        textString = stringReplace(textString); // <-----
        bufferReplace(textBuffer);
        intReplace(i);
        System.out.println(textString);
        System.out.println(textBuffer);
        System.out.println(i);
      }
    }
      

  4.   

    StringBuffer 不是不变类
    String是不变类
    那int也是不变的吗?
      

  5.   

    to doulikeme(来去无踪) :
    String str1=new String("1");
    String str2=new String("1");
    那str1=str2是false!不能说str1和str2的reference都是一致的
      

  6.   

    java中常用类究意哪些类是不可变的,只有String吗
      

  7.   

    回java中常用类究意哪些类是不可变的,只有String吗?
    不知道有多少,不过我还见过Class类也是final的,需要去看api才能知道吧
      

  8.   

    text = text.append("c");
    这一句改成text.append("c");就可以基本类型的包裹器类也有类似的“不可变”性质。
      

  9.   

    StringBuffer在API中是这样定义的:
    public final class StringBuffer
        implements java.io.Serializable, CharSequence
    看上去也是不变的啊