A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

有时候是两个有时候是一个吧?

点评

创建了两个String对象,一个在常量池,一个在堆内存.  发表于 2016-8-4 22:03

17 个回复

正序浏览
必须的两个  一个在"栈"内存,一个在"堆"内存.
回复 使用道具 举报
牧风 发表于 2016-8-2 23:09
两个 一个在常量池 存了"a" 一个在堆 存了常量池 "a'的地址

如果常量池之前有“a”,不就是只用创建一个对象?
回复 使用道具 举报
两个吧应该
回复 使用道具 举报
是一个构造函数,生成一个新的对象,然后将这个新的对象的引用赋给a
回复 使用道具 举报
新手报道,大哥求罩!
回复 使用道具 举报
我觉得8楼是正解,你们觉得呢
回复 使用道具 举报
cat73 发表于 2016-8-3 00:31
我可以很肯定的告诉你,只创建了一个对象。
可以在 JVM 规范里找到相关规定。 ...

我也觉得是一个,"a" 只是一个常量对吗,, new的才是一个对象 是吗

求大神给解释一下呗
回复 使用道具 举报
2个,一个在常量池中,还有一个副本再堆里面
回复 使用道具 举报
caolufo 来自手机 中级黑马 2016-8-3 00:47:30
9#
到底是几个?
回复 使用道具 举报
创建了两个对象  String a = new String("a")
创建了两个对象,一个是new String(  )对象,在堆内存中
一个是”a”对象,在常量池中
把 a的地址值给 new String(  )
回复 使用道具 举报
cat73 黑马帝 2016-8-3 00:31:18
7#
我可以很肯定的告诉你,只创建了一个对象。
可以在 JVM 规范里找到相关规定。
回复 使用道具 举报
两个,“a”作为一个常量,会存在于常量池中,new出来的对象在堆内存中,可以看作是常量池中“a”的拷贝
回复 使用道具 举报
赞赞赞赞赞赞赞赞赞赞赞赞赞
回复 使用道具 举报
2个..................................
回复 使用道具 举报
这是手动装箱过程,只有一个引用对象,跟String a="a" 是一样的,后者是自动装箱(自动创建对象);
回复 使用道具 举报
两个 一个在常量池 存了"a" 一个在堆 存了常量池 "a'的地址
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马