程序代码如下:
public class Test {
public static StringBuffer doSomething(StringBuffer buff) {
buff = new StringBuffer();
buff.append("Hello World");
return buff;
}
public static void main(String[] args) {
StringBuffer buff = new StringBuffer();
buff.append("Hello");
doSomething(buff);
System.out.println(buff);
}
}
==========
个人的分析如下,以我的想法就是分析内存,从main()开始,首先是程序加载到code segment 中, 首先为static 变量创建对象和分配内存空间,如图 Data segment 主要是存放 静态变量和字符串和常量, 创建了一个StringBuffer buff分配在栈内存中 就是我给出的图片中的 stack 区, 然后 new StringBuffer();对象,在堆内存中,如图 heap 区. buff调用append方法传 "Hello"进来 , doSomething(buff);//调用doSomething 方法传一个StringBuffer 类型 参数为buff 进入 doSomething方法体,new 一新 StringBuffer对象并且调用 append方法,值为 "Hello World",return buff;反大括号, 局部变量消失,也就是说 doSomething 方法体内的 buff对象消失. 最后print main 方法中的 buff对象的值。
以上为我个人观点,如有不对的地方,请大家指出来。