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”。为什么?
答案 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;
}
}