声明一个引用变量并产生对象时,变量存储在栈空间,对象存储在堆中,如String s=new String("abc");那么如果只是声明String s;呢?s占不占内存空间?老师说不占内存空间,但又说为他分配了引用空间,那s到底占不占空间?不占的话s是存储在哪里的?

解决方案 »

  1.   

    JAVA不用考虑内存问题...
    内存由GC负责天知道JAVA后台把变量放在堆栈还是自由存储区里...
      

  2.   

    java的内存空间主要有两部分:栈内存和堆内存。当你声明一个变量,就是在栈内存中给这个变量分配了地址(类似于c中指针),但是堆内存是没有该变量的。当你使用new进行内存分配,才在堆内存中给它分配了空间。所以,String s,则栈内存中有指向s的地址,但是对内存中没有为s分配空间。
    顺便说一句,不应该使用String s=new String("abc")这种形式,这是非常低效的。相当于进行了3次内存分配。应该直接用String s="abc";