日期:2014-05-20  浏览次数:20755 次

请教关于return语句的内存分析!
举例:
public String getInfo() {
     return "Name:" + name + "\n" + "Age:" + age;
}//这是一个方法,仅仅是举下例子,亲们……

System.out.println(person.getInfo());//对象person(仅是举个例子)调用自身的getInfo();
问题:关于return语句的内存分析,如果return一个基本类型的变量,如int型(比如return i;),则会在栈内存stack中分配一小块内存存上return的值,当完成打印后则该小块内存会消失。现在的问题是:return一个字符串的内存分析不太懂。是不是在stack中分配一小块内存,再将"Name:" + name + "\n" + "Age:" + age;这一个字符串分配在data segment(数据区)中,再让stack中的这块区域指向data segment的这个字符串呀。然后将这个字符串打印出来。打印结束后栈内存(小块引用内存)和数据区(该字符串)就消失了呀……求指教……

------解决方案--------------------
我觉得有道理,不过我不懂哈

说句题外话,你这个方法名写的不好,不应该叫getInfo,应该是重写toString方法才合适
------解决方案--------------------
引用:
举例:
public String getInfo() {
     return "Name:" + name + "\n" + "Age:" + age;
}//这是一个方法,仅仅是举下例子,亲们……

System.out.println(person.getInfo());//对象person(仅是举个例子)调用自身的getInfo();
问题:关于r……

我觉得你说的差不多吧,不过最后有点问题
1.打印完了如果还有其他地方用了那个字符串,比如声明了String b = a.getInfo(),你所说的数据区里的字符串是不会释放的
2.就算其他地方没有再引用到这个字符串,它也不会马上消失,会等到下次java常量池gc的时候才会被回收掉