先看代码
public class StringBuffera {
public static void main(String[] args)
{
StringBuffer bf1 = new StringBuffer("hello");
StringBuffer bf2 = new StringBuffer("java");
test(bf1,bf2);
System.out.println(bf1+"...."+bf2);
}
public static void test(StringBuffer bf1,StringBuffer bf2)
{
bf1.append(bf2);
bf1=bf2;
System.out.println(bf1+"...."+bf2);
}
}
输出结果为java....java
public class StringBuffera {
public static void main(String[] args)
{
StringBuffer bf1 = new StringBuffer("hello");
StringBuffer bf2 = new StringBuffer("java");
test(bf1,bf2);
System.out.println(bf1+"...."+bf2);
}
public static void test(StringBuffer bf1,StringBuffer bf2)
{
bf1.append(bf2);
bf1=bf2;
System.out.println(bf1+"...."+bf2);
}
}
输出结果为java....java
hellojava....java
这时候问题就来了,为什么在主方法的打印结果里 bf1等于hellojava(bf1调用test后的结果)。却不等于bf2将引用传给bf1的值呢? 原来啊StringBuffer属于String的增强版,StringBuffer bf2这里是局部变量,将bf1=bf2只能在test这个方法里生效,这个test方法结束后,变量就消失了,所以并不影响主方法的打印结果