在方法调用时,如果用的是传值调用的话,方法只是将定义在方法外的变量作复制,然后进行运算,变量本身不发生改变。可以下代码的BufferReplace()方法执行后,变量textBufferString的值发生了改变,请问为什么?
public class T6 {
public static void StringReplace(String text){
text=text.replace('j', 'i');
System.out.println(text);
}
public static void BufferReplace(StringBuffer text){
text=text.append("C");
}

public static void main(String[] args){
String textString=new String("java");
StringBuffer textBufferString=new StringBuffer("java");

StringReplace(textString);
BufferReplace(textBufferString);

System.out.println(textString+textBufferString);
}
}

解决方案 »

  1.   

    BufferReplace() 中的参数是 StringBuffer text。参数是对象,是按址传递参数。也就是可以改变参数的值。
      

  2.   

    BufferReplace() 中的参数是 StringBuffer text。参数是对象,是按址传递参数。也就是可以改变参数的值。====================
    String参数也是对象啊,怎么不见它也改变?
      

  3.   

    String参数也是对象啊,怎么不见它也改变?-- String 比较特殊,它是“只读”对象,String 对象是不可变
      

  4.   

    string不变的原因是运行public static void StringReplace(String text)的时候其实有两个引用指向"java"这个字符串,由于string类的不可变性,执行text=text.replace('j', 'i');的时候其实是新生成了一个string对象,并把原来指向java的引用text指向了这个新对象,但是main里的String textString=new String("java");这个textString并没有变化
      

  5.   

    java是传值调用。不能改变基本类型,可以改变对象属性,不可以改变引用