为什么StringBuffer不会改变?

时间:2012-07-14 16:15:17

标签: java stringbuffer

public class Test1{
public static void main(String[] args){
    StringBuffer s=new StringBuffer("abcde");
    reverseString(s);
    System.out.println(s);
}
public static int reverseString(StringBuffer s){
    StringBuffer s1=new StringBuffer("");
    int length=s.length();
    for(int i=length-1;i>=0;i--){
        s1.append(s.charAt(i));

    }
    s=s1;
    return 1;
}

}

我想更改StringBuffer。在方法中,s =“edcba”,但我运行类,结果是“abcde”。为什么?

2 个答案:

答案 0 :(得分:2)

在JAVA中,变量总是由val传递,而你正在尝试做的事情,变量需要由ref传递。为了做你想做的事,引用不能改变,而是对象的属性CAN。

public static int reverseString(StringBuffer s){ 
    StringBuffer s1=new StringBuffer(""); 
    int length=s.length(); 
    for(int i=length-1;i>=0;i--){ 
        s1.append(s.charAt(i)); 

    } 
    s.replace(0, length, s1.toString()); 
    return 1; 
} 

答案 1 :(得分:1)

您只需在reverseString函数中更改StringBuilder s1。所以主要的s StringBuilder会是一样的。相反,你应该在完成后返回s1。

public class Test1{
    public static void main(String[] args){
        StringBuffer s=new StringBuffer("abcde");
        StringBuffer s1 = reverseString(s);
        System.out.println(s1);
    }
    public static StringBuffer reverseString(StringBuffer s){
        StringBuffer s1 =new StringBuffer("");
        int length=s.length();
        for(int i=length-1;i>=0;i--){
            s1.append(s.charAt(i)); 
        }
        return s1;
    }
}