cnvm 阿里巴巴:这个java程序的结果为什么是这样的?

来源:百度文库 编辑:高考问答 时间:2024/04/29 22:44:02
public class Test{
public static void main(String[] args){
StringBuffer sb=new StringBuffer("Hello");
StringBuffer sb1=new StringBuffer("Hello");
new Test().kkk(sb,sb1);
System.out.println(sb+"\n"+sb1);
}
public void kkk(StringBuffer sb,StringBuffer sb1){
sb.append("there");
sb1=sb;
}
}

运行结果为
Hellothere
Hello

帮我分析一下。
===>to 嘻嘻_0
你说
"赋值给了sb1(这里的值还是没有改变之前的值)",
为什么在此给sb1所赋的值是sb没有改变之前的值?
这个还是搞不懂。

sb首先赋值为:"hello"
StringBuffer类型可以改变字符串的内容,在方法kkk中间,使用append()方法给sb增加了"there",再将sb的值赋值给了sb1(这里的值还是没有改变之前的值)
所以main方法里面调用的时候,sb的值变成了hellothere
sb1的值为 hello

public class Text{
public static void main(String[] args){
StringBuffer sb=new StringBuffer("Hello");
StringBuffer sb1=new StringBuffer("Hello");
new Text().kkk(sb,sb1);
System.out.println(sb+"\n"+sb1);
}
public void kkk(StringBuffer sb,StringBuffer sb1){
sb.append("there");
sb1.delete(0,sb1.length());
sb1.append(sb);
}
}
运行结果为
Hellothere
Hellothere

在函数KKK里sb1的值为 Hellothere
你可以在sb1=sb;之后添加句System.out.println(sb1); 测试一下
但是在mian函数里的sb1仍为Hello
sb1=sb 只在本函数内有效
PS:sb1.delete(0,sb1.length());sb1.append(sb);
可用sb1.replace(0,sb1.length(),sb.toString());替换