1
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”。为什么?

4

2 回答 2

2

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

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; 
} 
于 2012-07-14T16:30:24.680 回答
1

您只需在 reverseString 函数中更改 StringBuilder s1。所以 main 中的 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;
    }
}
于 2012-07-14T16:17:21.700 回答