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

String在堆栈中的存储
刚才看帖子有人说了这么一句话 我感觉不对 大家看看
再说点题外话,Stirng str2 = new Stirng("Hello");其实应该有两个对象,一个是存在于栈中的"Hello",

另外一个是对变量"str2"的指向,存在于堆内存中。用new关键字不管池中有没有都会开辟一块内存空间。

我感觉应该是堆中存放hello 栈中存放他的引用

哪个对?

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

------解决方案--------------------
栈中开辟一块空间存放引用str2

 堆存放"Hello"

 

这是定义,记住就行了。
------解决方案--------------------
显然你是对的。
------解决方案--------------------
只说一句:Java对象永远不会出现在栈中

http://topic.csdn.net/u/20120607/07/9d3a5948-ca38-4eb9-a4f8-63400b34e13a.html
------解决方案--------------------
我的理解是str是局部变量,肯定在栈里,然后str里存放的是一个引用,这个引用指向堆里的一块东东,另外貌似字符串都是存放在data segment里的。。。
------解决方案--------------------
我同意楼主的见解!
------解决方案--------------------
这个new String()是一个对象,它会在内存开辟一块内存空间。在栈中有一个引用指向它。这个和字符串池没有关系,如果是String str = "hello";这样会在字符串池中有一个hello。
------解决方案--------------------
LZ理解正确
------解决方案--------------------
LZ理解正确,其实那句话好像也是要表达成那个意思,可以表达补恰当。
------解决方案--------------------
字符串都放在数据区
new出来的东西都放在堆
只有局部变量和临时变量在栈中