这是我看到的一道题
private static void change(StringBuffer str11, StringBuffer str12) {
str12 = str11;
str11 = new StringBuffer("new world");
str12.append("new world");
}
public static void main(String[] args) {
StringBuffer str1 = new StringBuffer("good ");
StringBuffer str2 = new StringBuffer("bad ");
change(str1, str2);
System.out.println(str1.toString());
System.out.println(str2.toString());
}
结果是什么呢?
先给出这道题目的答案
**good new world
bad**
下面画图来分析这个过程
private static void change(StringBuffer str11, StringBuffer str12) {
str12 = str11;//2
str11 = new StringBuffer("new world");//3
str12.append("new world");//4
}//5
public static void main(String[] args) {
StringBuffer str1 = new StringBuffer("good ");
StringBuffer str2 = new StringBuffer("bad ");
change(str1, str2);//1
System.out.println(str1.toString());
System.out.println(str2.toString());
}
执行到第一步的图:
执行到第二步的图,这里chage方法中的形参str11,str22是实参str1,str2的地址拷贝。
这里str11和str22是实参str1,str2的地址拷贝,接着执行第三步的图:
上图中str12地址指向了“good”,接着看第四步图:
上图中str11的地址指向了堆中新的对象"new world",接着看第五步的图:
收藏自 一枝花算不算浪漫的博客