各位大虾,我有一事不明白,希望指点!
关于java 传送参数的问题,如下:
public class StrTEST{
public String string;
public StringBuffer stringbuffer;
public void setStr(String string){
  string+=new String("改变了String");

public void setStringBuffer(StringBuffer stringbuffer){
  stringbuffer.append("改变了Stringbuffer") ;
}
public void printStr(){
System.out.println(this.string);
System.out.println(this.stringbuffer);
}
public StrTEST(){
this.string=new String("一个默认的String值:");
this.stringbuffer=new StringBuffer("一个默认的StringBuffer值:");

this.setStr(this.string);               //传引用
this.setStringBuffer(this.stringbuffer);//传引用
this.printStr();
}
public static void main(String [] args){
new StrTEST();
}
}
我想通过setStr方法改变string的值,通过setStringBuffer改变stringbuffer的值
结果是后者改变成功,前者失败,不明白~~~~希望指点
***************************************************************************************
在网上找到一篇文章
public class Test {
public static void test(String str) {
str = "World";
}
public static void main(String[] args) {
String string = "Hello";
test(string);
System.out.println(string);
}
}
运行结果:
Hello
  为什么会这样呢?因为参数 str 是一个引用,而且它与 string 是不同的引用,虽然它们都是同一个对象的引用。str = "World" 则改变了 str 的值,使之指向了另一个对象,然而 str 指向的对象改变了,但它并没有对 "Hello" 造成任何影响,而且由于 string 和 str 是不同的引用,str 的改变也没有对 string 造成任何影响,结果就如例中所示。
***************************************************************************************
小弟不明白String类型的就是"string 是不同的引用"呢?                                解决问题马上划分!谢谢各位

解决方案 »

  1.   

    public String string;
    public void setStr(String string){
      string+=new String("改变了String");

    参数与类变量同名
    修改为
       this.string+=new String("改变了String");
    即可
      

  2.   

    感谢楼上的兄弟回答,但是我不明白stringbuffer为什么就不用this.stringbuffer就可以改变它的值呢?
      

  3.   

    因为setStr方法中,参数string和类变量同名了
    如果你用这个变量的话,只是在操作参数,要访问类变量就要用this来修饰
    而另外一个方法中不存在同名问题
    用不用this结果都一样
      

  4.   

    redduke1202()你好!我java是懂得不多!
    我现在疑惑是:
    类成员变量:stringbuffer
    在方法:setStringBuffer(StringBuffer stringbuffer)中参数也是有一个"stringbuffer",
    为什么不用this.stringbuffer就能改变呢?
      

  5.   

    String和StringBuffer的区别就是String运算时产生一个新的引用, 而不改变原引用的值,StringBuffer则是改变原值。