高手帮忙解释一下:在JAVA里 String s ="abc";   s  是放在 “堆” 还是 “栈”里;?"abc" 是放在 “堆” 还是 “栈”里;?还有是 String str = new String("hh");呢??
 str 是放在 “堆” 还是 “栈”里;?"hh" 是放在 “堆” 还是 “栈”里;?
小弟不甚感激。

解决方案 »

  1.   


     new 出来的东西都是在 堆 里的. 固定的东西 和 方法之间的 调用等需要的内存是在 栈 里的.
     举个例子:  
          List<Object> lst = new ArrayList<Object>();
         for(long i=0;i<1000000000;i++){
               lst.add(new Object());
         }
       
      出现异常是:Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
     
     
         public static void main(String[] args) throws Exception {
         main(null);
    }
       
    出现的异常是:Exception in thread "main" java.lang.StackOverflowError 
      

  2.   

    堆就是new 关键字声称的对象,其他的变量都是存放在栈中的
      

  3.   

    heap,堆是存放动态生成的东东,new 出来的对象。
    stack,栈是存放局部变量!
    date segment ,存放静态变量,字符串常量。
    在JAVA里 String s ="abc"; 
    如果是在方法里定义的,s,存放在stack;"abc"存放在date segment
    还有是 String str = new String("hh");呢?? 
    "hh"存放在date segment,new String("hh")存放在heap,str存放在stack;如有不正确请指出
      

  4.   

    String s ="abc";   s  是放在 栈里的"abc" 是放在 string池里的还有是 String str = new String("hh");呢??
     str 是放在 栈里的"hh" 也是放在String池里的
    只是还有一个String 的对象放在堆里,其内容是"hh"我分析是这样的,请高手指点