举例:
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的这个字符串呀。然后将这个字符串打印出来。打印结束后栈内存(小块引用内存)和数据区(该字符串)就消失了呀……求指教……

解决方案 »

  1.   

    我觉得有道理,不过我不懂哈说句题外话,你这个方法名写的不好,不应该叫getInfo,应该是重写toString方法才合适
      

  2.   

    嗯嗯,嘿嘿,谢谢指点,就是不知道那个return的内存如何分析……
      

  3.   

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