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 のみを変更します。したがって、メインの 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 に答える