本帖最后由 ayds1984 于 2009-08-14 09:47:27 编辑

解决方案 »

  1.   

    String是不可变字符串
    StringBuffer是可变字符串
      

  2.   

    String不可变,stringReplace方法只是重新创建了另一个String对象,你原来的不变。
    StringBuffer可变,所以可以在原来的基础上修改。
      

  3.   

    我明白了,其实bufferString = bufferString.append("C");
    和bufferString.append("C");效果一样哈哈,结贴了,没想过来哈哈
      

  4.   

    String中修改字符串的方法都是产生新的对象,这跟String的实现有关StringBuffer.append方法是在当前对象后追加
      

  5.   

    stringReplace:,参数相当于一个局部变量,其作用域和生命期就是stringReplace方法内部,所以局部变量实际上是被隔离的,方法体就是一个隔离区,与方法以外的同名变量是两个不同的个体,互不影响。所以对参数的修改不会影响到方法以外和参数同名的变量。如例子中的方法参数textString,在方法中对做了修改,但这个参数在方法结束后,被释放了。对外部没有任何影响。stringBufferReplace:与上面不同,这个方法中并没有对参数做修改,而是对参数这个引用所指向的内容做了修改。被修改的内容是由两个引用指向的,一个是实际参数(main中的bufferString),一个是形式参数(stringBufferReplace方法的参数bufferString),用其中的一个引用对内容所修改,必然所影响到另一个。
      

  6.   

    首先这两个方法都是传递对象引用  
    private static void stringReplace(String textString){
            textString = textString.replace("j", "i");
        }  这个方法会让textString指向一个新的对象,而不是改变它的指向对象的状态(因为String是不可变的所以不能修改它的内部状态),这种通过对象引用作为方法参数指向新对象在JAVA中是不允许的,所以有很多大师都把此视之为JAVA只有值传递private static void StringBufferReplace(StringBuffer bufferString){
            bufferString = bufferString.append("C");
        }
    而这个方法的参数是StringBuffer的引用,可见方法内将这个引用指向的对象的状态进行了操作,即将它的值添加了C这个字符串,那么这个字符串的内容就变成了javaC了,可见将引用赋值给新对象是不可行的,但是改变对象的属性是可以的。
      

  7.   

    你就算只写bufferString.append("C");它也是javajavaC