刚才看帖子有人说了这么一句话 我感觉不对 大家看看
再说点题外话,Stirng str2 = new Stirng("Hello");其实应该有两个对象,一个是存在于栈中的"Hello",另外一个是对变量"str2"的指向,存在于堆内存中。用new关键字不管池中有没有都会开辟一块内存空间。我感觉应该是堆中存放hello 栈中存放他的引用哪个对?

解决方案 »

  1.   

    可以分解为:
    Stirng str2;
    str2 = new Stirng("Hello");
    那就相当于在方法中定义了局部变量,而局部变量是放在栈中的啊。
    你可以类比:int i;
                i=3;那这不就是相同的意思了吗?
      

  2.   

     栈中开辟一块空间存放引用str2 堆存放"Hello"       这是定义,记住就行了。
      

  3.   

    只说一句:Java对象永远不会出现在栈中http://topic.csdn.net/u/20120607/07/9d3a5948-ca38-4eb9-a4f8-63400b34e13a.html
      

  4.   

    我的理解是str是局部变量,肯定在栈里,然后str里存放的是一个引用,这个引用指向堆里的一块东东,另外貌似字符串都是存放在data segment里的
      

  5.   

    这个new String()是一个对象,它会在内存开辟一块内存空间。在栈中有一个引用指向它。这个和字符串池没有关系,如果是String str = "hello";这样会在字符串池中有一个hello。
      

  6.   

    字符串都放在数据区
    new出来的东西都放在堆
    只有局部变量和临时变量在栈中