這是我看到的一道題
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());
}
結(jié)果是什么呢壹无?
先給出這道題目的答案
**good new world
bad**
下面畫圖來分析這個(gè)過程
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());
}
執(zhí)行到第一步的圖:
執(zhí)行到第二步的圖,這里chage方法中的形參str11,str22是實(shí)參str1樊破,str2的地址拷貝。
這里str11和str22是實(shí)參str1骗绕,str2的地址拷貝掘殴,接著執(zhí)行第三步的圖:
上圖中str12地址指向了“good”,接著看第四步圖:
上圖中str11的地址指向了堆中新的對(duì)象"new world",接著看第五步的圖:
收藏自 一枝花算不算浪漫的博客