请问String a = "test";后堆中和常量池是不是都产生和test相关的东西啊

test字符串是在常量池是吗,堆中有什么东西记录和test相关呢,谢谢... test字符串是在常量池是吗,堆中有什么东西记录和test相关呢,谢谢 展开
 我来答
banyan_virus
2010-09-14 · TA获得超过358个赞
知道小有建树答主
回答量:105
采纳率:0%
帮助的人:54万
展开全部
System.out.println(("test" instanceof String));
// true
用instanceof验证 "test" 是一个String对象

String str1 = "test";
String str2 = "test";
System.out.println(str1==str2);
//true
"=="运算符比较的是对象的引用是否相同,也就是指向的内存地址是否相同。
可以看出,str1 和 str2 指向同一内存,也就是系统默认的至创建了一个"test",而str1 和str2 都是这一内存的引用,而且引用类型是String。

通过 new 构造方法() 这种方法指定创建的对象是系统在堆区中开辟一个的空间,来存放对象的数据。这个是大家所公认的。

有一种说法 "test" 是系统自动的在常量池生成对象的数据,引用指向的也是常量池中的这个地址。如果再调用"test" 赋值,就直接把这个引用传递给对象。

至于在堆中存在什么东西,我目前还不会通过方法验证。我的理解就是不用new就和堆区不发生关系。

其实java的底层一般对程序员透明的,我们不必去深究。知道区别使用就好了。
书荒莫慌
2010-09-14 · TA获得超过2972个赞
知道小有建树答主
回答量:700
采纳率:0%
帮助的人:537万
展开全部
呃,还是针对问题回答好点吧。
1.test字符串是在常量池是吗?回答:是
2.堆中有什么东西记录和test相关呢?回答:就是a了,堆中有一个内存装有a,a其实是对常量池中的"test"的引用,也就是说,a中装的是常量池中"test"这个对象的内存地址。
=====================================================================
说个题外话,String a=new String ("test");
如果这样的话,那么堆中装的是一个对象而不是一个引用了,a直接装着test字符创,而不是对常量池"test"中的一个引用了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
from_rr
2010-09-14 · TA获得超过1138个赞
知道小有建树答主
回答量:318
采纳率:0%
帮助的人:323万
展开全部
使用你当前方式声明的字符串,java虚拟机会自动的把
“test”记录在字符串常量池中。堆中记录的只是这个“test”
的引用。即一个地址。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
我今天上课了
2010-09-14 · TA获得超过1410个赞
知道小有建树答主
回答量:844
采纳率:0%
帮助的人:676万
展开全部
test是对象 , a是对象的引用

跟User a=new User();一样,
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yhy_633
2010-09-14 · TA获得超过158个赞
知道答主
回答量:237
采纳率:0%
帮助的人:0
展开全部
学习中.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式