2012-07-14 62 views
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不會更改?

我想改變StringBuffer.In的方法,S = 「EDCBA」,但我運行類,結果是「ABCDE」。爲什麼?

+3

爲什麼不直接使用'StringBuffer.reverse()'? – 2012-07-14 16:20:32

+0

在Java 5.0(2004)中,它建議你在99%的情況下使用'StringBuilder'。這是其中之一。 – 2012-07-14 16:26:58

+0

哦,這是一個面試的問題。感謝您的幫助 – Europa 2012-07-16 04:14:12

回答

2

在JAVA中,變量總是VAL過去了,你嘗試什麼要做的是,變量需要通過ref。在o中傳遞rder做你想做的事情,引用不能改變,但是對象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; 
} 
+0

我只是一個新鮮的人。謝謝!你的青睞有助於解決我的問題。 – Europa 2012-07-16 04:39:05

1

你只改變的StringBuilder S1在reverseString功能,所以在主要的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; 
    } 
} 
+1

's1'是一個'StringBuffer',但'return s1'必須是一個String。也許你的意思是'StringBuffer' – 2012-07-14 16:28:12

+2

這將避免這個問題,而不是回答它。檢查Chris Gessler的帖子以找到答案。 – mazaneicha 2012-07-14 16:44:31

+0

謝謝,這是一個面試的問題,返回值應該是int。 – Europa 2012-07-16 04:30:16

相關問題