下面是一个小例子:
public static void main(String []args) {
StringBuffer str1 = new StringBuffer("good");
StringBuffer str2 = new StringBuffer("bad");
test (str1, str2);
System.out.println(str1.toString());
System.out.println(str2.toString());
}
public static void test (StringBuffer str1,StringBuffer str2) {
str1 = str2;
str1 = new StringBuffer("world");
str2.append(" test");
}
关于对象输出的一个问题,大家猜猜输出内容是什么。
输出结果:
str1=good
str2=bad test
答案是str1=good 因为在main方法中已经创建一个StringBuffer 在堆地址中已经存在,在test种方法在进行创建是不会替换main方法中str1中的对象,str2=bad test 是因为对象进行追加所以等于bad test。
如果不理解可以看下面的例子
public static void main(String []args) {
StringBuffer str1 = new StringBuffer("good");
StringBuffer str2 = new StringBuffer("bad");
test (str1, str2);
System.out.println(str1.toString());
System.out.println(str2.toString());
}
public static void test (StringBuffer str1,StringBuffer str2) {
str1 = str2;
str1 = new StringBuffer("world");
str2.append(" test");
System.out.println("test方法");
System.out.println(str1.toString());
}
输出结果:
test方法
world
good
bad test
在test 方法中str1的输出,我们发现是改变str1的对象啦,在对比main方法中str1可以得出答案,在一个方法中新建对象,只在这个方法是有效的,不会影响其他方法的值。