java中声明一个字符串变量分别放在内存的哪些地方 比如说String a = "abc"

java中声明一个字符串分别放在内存的哪些地方 比如说String a = "abc"; 变量a 放什么地方?栈? 那a的指向的"abc"呢?

"abc"是分配在栈中的。

而a只是一个对象,一个指向存放"abc”栈的对象,分配在堆中。

许多人都做过这样的事情,但是,我们到底声明了什么?回答通常是:一个String,内容是“abc”。这样模糊的回答通常是概念不清的根源。如果要准确的回答,一半的人大概会回答错误。
这个语句声明的是一个指向对象的引用,名为“a”,可以指向类型为String的任何对象,目前指向"abc"这个String类型的对象。这就是真正发生的事情。我们并没有声明一个String对象,我们只是声明了一个只能指向String对象的引用变量。所以,如果在刚才那句语句后面,如果再运行一句:
String string = a;
我们是声明了另外一个只能指向String对象的引用,名为string,并没有第二个对象产生,string还是指向原来那个对象,也就是,和s指向同一个对象。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-08-07
a放在堆中,对应的是一个地址,
“abc”放在栈中,
其中a中的地址就是“abc”存放的位置追问

请问一下,内存一共分几个部分?

追答

堆,栈,还有存放一些临时变量的地方

追问

常量一般放哪的? 变量一般放哪的?

追答

内存分几块,都是逻辑上进行划分的,你可以想象成这几块~不知道怎么讲了,自己网上搜搜吧

第2个回答  2012-08-07
具体放在哪里我们不需要关心,那是jvm和操作系统需要关心的事

我们这么理解就可以了, jvm会在内存中开辟一块内存空间作为标识符列表,里面存储的是标识符名称(例如变量名、函数名、对象名等)、标识符类型、首地址……

首地址就是具体内容在内存中存放的位置

如果确实对jvm对内存的管理感兴趣,建议看《深入jvm》或者《java virtual machine》 这类介绍jvm的书,里面有jvm内存装载机制的介绍
第3个回答  2012-08-09
“a ”放在堆里面,“abc”放在栈里面
相似回答